右左法则:
从变量名开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被分析完毕。
int a; 整型变量
int *a; 整型指针变量
int **a; 整型指针的指针变量
int a[10]; 整型数组
int *a[10]; 整型指针数组
int (*a)[10]; 数组指针变量
int (*a)(int); 函数指针变量
int (*a[10])(int); 函数指针数组 a是数组,数组中每个元素为指针,指向函数,函数形参为int,返回值为int
(最后的变量、数组等为其本质)
int *(*(*fp1)(int))[10];
fp1:函数指针变量,指向一个形参为int,返回值为一个数组指针,该指针指向一个整型指针数组
int *(*(*arr[5])())();
arr:函数指针数组,该数组中的元素指向形参为空,返回值为一个函数指针,该指针指向一个形参为空,返回值为int *
float (*(*b())[])();
b:函数,该函数形参为空,返回值为数组指针,该指针指向一个函数指针数组,该函数里的元素指向形参为空,返回值为float的函数
void *(*c)(char a, int (*b)())
c:函数指针变量,指向一个有两个参数的返回值为void *的函数,第一个形参为char a,第二个形参为函数指针,该指针指向一个形参为空,返回值为int的函数
float (*(*e[10])(int *))[5]
e:函数指数数组,该数组中元素指向形参为int *,返回值为数组指针,指向一个float型数组,数组中元素为float型