看了那篇文章,总结一下,解析复杂声明其实就是从最里面的未定义标识符开始,左边和右边同时找一对符号来配对,不断向外扩展,最后完成解析。
int (*(*func)[5][6])[7][8];
func是个指针,这个指针指向什么呢。那我们就可外围,左边和右边找一对符号:* [5][6],这表示一个二维数组,数组元素是指针。所以func指向的就是这个数组啦。但是这个数组元素指针指向什么我们还是不知道的,所以我们再向外找:int [7][8],就是说指针指向的又是一个二维数组,数组元素是int。
int (*(*(*func)(int *))[5])(int *);
func是个指针,指向的是:* (int*),就是一个函数,形参是int*,返回的是一个指针,那么返回的这个指针指向什么呢?外围是:* [5],即指向的是一个数组,数组元素是指针,指向的是:int (int*),即指向一个函数,形参是int*,返回一个int。
int (*(*func[7][8][9])(int*))[5];
func是个数组,数组元素是指针,指向的是:* (int*),即一个函数,形参是int*,返回一个指针,指向的是int [5],即指向一个数组,数组元素是int.