今天讲了用右左法则来理解复杂的变量声明。总结起来就是以下几句话:
先看右再看左,如果右边没有东西就是变量,有(就是函数,有【就是数组,然后看左边,有*就是指针,然后看是int还是char还是void等等。
然后举了几个例子进行练习:
int *( *( *arr[5])())();
arr是一个函数指针数组,该数组里的元素指向一个形参为空,返回值为函数指针;该指针指向一个形参为空,返回值int*
float ( * ( *b()) [] )();
b是一个函数,该函数形参为空,返回值位数组指针,该指针指向一个函数指针数组,数组的元素指向一个形参为空,返回值位float的函数。
void * ( *c) ( char a, int (*b)());
C是 函数指针变量,指向一个有两个参数的返回值为void*的函数第一个形参位char,第二个形参为函数指针,该指针指向一个形参为空,返回值为int的函数。
float ( * ( * e[10]) (int *) ) [5];
e为函数指针数组,数组里元素指向一个形参位int*,返回值为数组指针,指向的数组为float型数组。