C语言-第十二章高级指针

  1. const与指针:
    const char *p;
    const修饰 *p
    *p 只读 //*p = ‘X’;错误的
    p的值可以修改 p可以指向其它内存
    p = “HELLO”;

     char const *p;
     	const修饰 *p
     	*p只读
     	p可以改变
     	
     char * const p;
     	const修饰p
     	p只读
     	*p 可以改变
     
     const char * const p;
     	const修饰 p 和 *p
     	p和*p都是只读 不能修改
    

    2.指针加减运算
    指针加1 加了一个单位(数据类型大小)的地址大小

    数组指针
    本质是一个指针 这个指针指向一个数组
    int arr[10] = {};
    int (pArr)[10] = &arr;
    指针数组
    本质是一个数组 数组中存储的元素是指针
    int
    arr[10] = {}; //指针数组

    一维数组名 是数组首元素的地址
    int arr[10] = {};
    int p = arr;// &arr[0] ===> &((arr+0)) ==> &*arr == arr
    二维数组名 是一给数据的地址
    int brr[3][4] = {};
    int (pb)[4] = brr; //&brr[0][0] 第一个元素的首地址
    &brr[0][0] ==> &(
    (brr[0]+0)) ==> &brr[0] = brr[0]
    &brr[0][0] == brr[0] //第一个元素的地址
    &brr[0] ==> &(
    (brr+0)) ==> &*brr == brr
    &brr[0] == brr; //第一个一维数组的地址
    &brr //整个二维数组的地址

     	int arr[N][M];
     	int (*pnm)[N][M] = &arr;
     	int (*pm)[M] = arr;
     	int *p = arr[0];
     	p = &arr[0][0];
     	
     	brr[2][3]  == *(*(brr+2)+3)  *(brr+2)[3] ==> brr[2][3]
    

    函数指针
    本质是指针 指针指向一个函数
    函数名本身代表该函数所在内存的地址

    函数返回值类型 (*函数指针变量)(函数形参列表);
    函数指针变量 = 函数名;

    指针函数
    本质是一个函数 该函数返回一个指针
    int * myfunc(int a,int b){

    指针常量
    常量 这个指针是一个常量
    int * const p;
    常量指针
    指针 指针指向一个常量
    const int *p;
    函数指针数组:
    本质是数组 数组里的元素是 函数指针

    认识变量 void (*fpArr[10])();
    首先从标识符开始,从标识符往右看,如果[]说明是数组 如果()是函数
    如果遇到) 就要往右看 * 指针 剩下是一个函数
    函数指针数组
    fpArr [] 数组
    * X 指针
    void X() 函数
    函数指针数组

     int (*gf)(int,int);   //定义一个函数指针类型的变量gf   gf是变量
     typedef (*FT)(int,int);// 定义一个函数指针类型FT       FT是类型	
     typdef void (*sighandler_t)(int);//定义类型  类型名为 sighandler_t
     sighandler_t signal(int signum,sighandler_t handler);	
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值