左右法则:首先从从未定义的标识符开始阅读,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
举例:int a;整型变量
int *a;整型指针变量
int **a;整型指针的指针变量
int a[10];整型数组
int *a[10];整型指针数组
int (*a)[10];整型数组指针变量
int (*a)(int);整型函数指针变量
int (*a[10])(int);整型函数指针数组(数组里面存放的都是指针,指针指向 的是整型函数的地址)
int num-5;
int *p=#
int **pp=&p;
指针变量p指向num:即p中保存的是num的地址
int *(*(*fp1)(int))[10];
函数指针变量,该函数指针指向一个形参为int,返回值为数组指针,该数组指针指向一个整型指针数组。
float(*(*b())[])();
函数,形参为空,该函数的返回值为数组指针了,该指针指向一个函数指针数组,该数组里的函数指向一个形参为空,返回值为float的函数。
int *(*(*arr[5])())();
函数指针数组,该函数指针指向一个无参的函数,返回值为函数指针,该指针指向一个函数指针,该函数的形参为空,返回值为int *
void *(*c)(char,int(*)());
函数指针变量,该指针指向函数形参为char和整型函数指针,返回值为void*
float(*(*e[10](int*))[5])
函数指针数组,该数组的元素指向一个形参为int*,返回值为float型指针的数组