参考:http://www.diybl.com/course/3_program/c++/cppsl/2008217/100104.html
The right-left rule: Start reading the declaration from the
innermost parentheses, go right, and then go left.
When you encounter parentheses, the direction should
be reversed. Once everything in the parentheses has been
parsed, jump out of it. Continue till the whole declaration
has been parsed.
文章作者的修正:
应该是从未定义的标识符开始阅读,而不是从括号读起,之所以是未定义的标识符,
是因为一个声明里面可能有多个标识符,但未定义的标识符只会有一个。
下面是我回答的网页上面遗留的问题
int (*(*func)[5][6])[7][8];
找到标识符 func
看右边:NONE
看左边:* 说明func是一个指针
跳出括号
看右边:[][]是一个二维数组
看左边:* 说明数组元素类型是指针
跳出括号
看右边:[][]是一个二维数组
看左边: int 说明数组元素类型是整型
总结: func是一个指向二维数组A的指针,A数组的元素是指向int型的二维数组的指针
int (*(*(*func)(int *))[5])(int *);
找到标识符 func
看右边:NONE
看左边:* 说明func是一个指针
跳出括号
看右边:(int *) 说明是一个函数,函数参数是指向int的指针
看左边:* 说明返回值是一个指针
跳出括号
看右边:[]说明是一个数组
看左边:* 说明数组的元素是指针
跳出括号
看右边:(int *)说明是一个函数,函数参数是指向int的指针
看左边:int 说明函数返回值是整型
总结:func是一个指向A函数的指针,A函数的参数是int,A函数的返回值是一个指向B数组的指针,B数组的元素是指向B函数的指针,B函数的参数是一个指向int的指针,返回值是int
int (*(*func[7][8][9])(int*))[5];
找到标识符 func
看右边:[][][]说明func是一个三维数组
看左边:* 说明数组的元素类型是指针
跳出括号
看右边:(int *) 说明是一个函数,函数参数是指向int的指针
看左边:*说明函数的返回值是一个指针
跳出括号
看右边:[]说明是一个数组
看左边:int 说明数组的元素类型是整型
总结:func是一个以指向A函数的指针为元素的三维数组,A函数的参数是指向int的指针,A函数的返回值是一个B数组,数组的元素是int
转自:http://acmluffy.ycool.com/post.3194680.html