指针与函数以及二维数组

使用指针完成一维字符型操作

strlen()

strcpy()        strncpy

strcat()         strncat

strcmp()        strncmp

回调函数callback:qsort(),可以理解为函数的接口,在函数中使用回调函数,可以实现功能的个性化设置。

 void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));
 
  @base    数组起始位置
  @nmemb   排序的元素个数 
  @size    单个元素的大小 
  @compar  比较函数  //确定进行比较的两个元素的大小规则 

  int a[10] = {1,2,3,4};
  
  int compar(const void *a, const void *b)  //回调函数
  {
     *(const int *)a - *(const int *)b     
  }
  compar 两个参数 其实表示 数组中某两个元素的地址 
  
  compar 返回值 表示的就是数组中两个元素的大小关系 
  
void *  //万能指针  --可以接收任意类型的指针 
        //void类型 
        //
        
        注意: 
         如果通过该类型的地址进行数据访问
         一定要转换为 明确类型 

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void  compar(const void *a, const void *b)
{
    
    while((const char *)a ==(const char *)b && (const char *)a != '\0' && (const char *)b != '\0')
    {
        ++a;
        ++b;
    }
    return strcmp(a,b);
    //return strcmp((const char *)a ,(const char *)b);
}

int main()
{
    int i = 0;
    char s[][20] = {"hello","world","china"};
    qsort(s,3,sizeof(s[0]),compar);
    for(i = 0; i <3; ++i)
    {
        puts(s[i]);
    }
}

使用回调函数实现a+b\a-b\a*b等的操作。

指针与二维数组

指针 + 二维数组 


int a[3][4]; //本质还是一维数组 
int[4] a[3]; //理解角度 
             //a --数组名 --代表类型 int [3][4]
             //a --代表的值 -- 首元素的地址 -- a[0] 
             //a[0] 的数据类型 int[4]
             //&a[0]--对应的数据类型 int(*)[4] //数组类型 (一维整型数组类型)
             //数组类型的指针 --- 数组指针                   
             int *
             
int (*p)[4] = a;

*p   //三步运算完成后
     *p 相当于 是 int[4]这种类型 //数组
     *p 就相当于 int[4]这个数组的 数组名

int a = 10;
int *p = &a;

*p <=> a     

*(*(p+i) + j)<=>a[i][j]

p+1 //偏移到了 下一个 int[4]
    //类型为int(*)[4]
*(p+1) //偏移到下一个int 
       //*(p+1) 代表的类型int[4] 此时相当于是 int[4]的数组名 
       //*(*(p+1) + 1)
       
       

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值