指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身 决定。它是“储存指针的数组”的简称。
int *p1[10];
“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int* 修饰的是数组的内容,即数组的每个元素。
数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节, 至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
int (*p2)[10];
在这里“()”的优先级比 “[]”高, “*”号和 p2 构成一个指针的定义,指针变量名为 p2,int 修饰的是数组的内容, 即数组的每个元素。
函数指针:就是函数的指针。
A) char* (*fun1)(char* p1,char* p2);
B) char* *fun2(char* p1,char* p2);
C) char* fun3(char* p1,char* p2);
A) 这里 fun1 不是什么函数名,而是一个 指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。
B) fun2 是函数名,p1,p2 是参数,其类型为 char*型,函数的返回值为 char * *类型,是个 二级指针。
B) fun3 是函数名,p1,p2 是参数,其类型为 char*型,函数的返回值为 char * 类型。
函数指针的使用:
函数指针数组:
char* (*pf[3])(char* p);
它是一个数组,数组名为 pf,数组内存储了 3 个指向函数的指针。这些指针指向一些返回值类型为指向字符的指针、参数为一个指向字符的指针的函数。
函数指针数组的使用:
函数指针数组的指针:
char* (*(*pf)[3])(char* p);
这里的 pf 和函数指针数组的 pf 就完全是两码事了。函数指针数组的 pf 并非指针,而是一个数组名; 这里的 pf 确实是实实在在的指针。这个指针指向一个包含了 3 个元素的数组;这个数字里 面存的是指向函数的指针;这些指针指向一些返回值类型为指向字符的指针、参数为一个 指向字符的指针的函数。(其实就是函数指针数组的指针里的pf指向的是函数指针数组的pf(次pf非彼pf))。
函数指针数组的指针的使用:
参考书籍:《C 语言深度解剖》陈正冲