c数组和指针 1、数组和指针的相互转换 int arr[5] = {1,2,3,4,5}; int *p = arr; 一个指针指向数组的首地址,那么指针和数组可以相互转换。 arr[i] ==== *(arr+i) ==== *(p+i) ==== p[i] 转换公式:x[y] === *(x+y) 数组 指针 2、数组指针 概念:指向数组的指针 int (*p)[2]; int arr[3][2]; p = arr; //指向一个二维数组 3、指针数组 概念:数组素是指针 int *p[2]; int *p1,*p2; int *p[2] = {p1,p2}; 4、函数指针 概念:指向函数的指针 void (*p)(int,int); void func(int a,int b); p = func; //函数名也是地址 p(10,20); 函数指针一般作为回调函数的参数。 5、指针函数 概念:返回值为指针的函数 void *p(int,int); 6、函数指针数组 概念:由函数指针构成的数组 如:void (*p[2])(int,int) p是一个数组,数组素是指针,指向一个函数,这个函数的参数为两个int,返回值为void 7、复杂声明 分析复杂声明分为两步: (1)从左到右找到第一个非关键字的标识符 (2)以这个标识符为中心与符号([]、()、*)逐个接合 优先级: 第一:声明中被括号括起来的部分 第二:后缀操作符:[] () []:是一个数组,分析它的数组素 ():是一个函数,分析它的返回值和参数 第三:前缀操作符:* *:是一个指针,分析它指向的内容 例子1: char *(*func)(int) 分析: ①从左到右找到第一个非关键字的标识符func ②跟*结合,func是一个指针,执向xxx ③跟()结合,指向一个函数,这个函数的返回值是char *,参数是int 总结:func是一个函数指针 例子2:char *(*func[10])(int) 分析: ①从左到右找到第一个非关键字的标识符func ②跟[]结合,func是一个数组,数组素是xxx ③跟*结合,数组素是一个指针,指向xxx ④跟()结合,指向一个函数,这个函数的返回值是char *,参数是int 总结:func是函数指针数组 例子3:int *(*func(int))[3] 分析: ①从左到右找到第一个非关键字的标识符func ②跟()结合,func是一个函数,函数的参数是int,返回值是xxx ③跟*结合,返回值是一个指针,指向xxx ④跟[]结合,指向一个数组,数组素int * 总结:func是数组指针函数 例子4:char *(*(*func(char *(*p)(char *)))[2])(int) 分析: ①从左到右找到第一个非关键字的标识符func ②跟()结合,func是一个函数,参数是一个函数指针,返回值是xxx ③跟*结合,返回值是一个指针,指向xxx ④跟[]结合,指向一个数组,数组素是xxx ⑤跟*结合,数组素是一个指针,指向xxx ⑥跟()结合,指向一个函数,这个函数的参数是int,返回值是char* 总结:func是函数指针数组指针函数 a) 一个整型数 int a; b) 一个指向整型数的指针 int *a; c) 一个指向指针的的指针,它指向的指针是指向一个整型数 int a; d) 一个有10个整型数的数组 int a[10]; e) 一个有10个指针的数组,该指针是指向一个整型数的 int *a[10]; f) 一个指向有10个整型数数组的指针 int (*a)[10]; g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int (*a)(int) h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int (*a[10])(int);
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/54459.html