int (*(*var[3])())(void (*)());
您如何描述上述声明中的var类型?
我明白了:
将var声明为函数(A)的3个指针的数组
这些函数(A)接受任何输入并返回指向函数的指针(B)
这些函数(B)采用指向函数(C)的指针并返回int
这些函数(C)接受任何输入并且不返回任何内容
这是对的吗? 感谢
答案 0 :(得分:3)
从最左边的标识符开始,逐步解决问题,记住()
之前[]
和*
绑定,所以:
T *a[N] // a is an array of pointer to T
T (*a)[N] // a is a pointer to an array of T
T *f() // f is a function returning pointer to T
T (*f)() // f is a pointer to a function returning T
修改强>
虽然它没有出现在这个声明中,const
可以引入自己的皱纹:
T const *p // p is a pointer to constant T
const T *p // same as above
在这两种情况下,p
都指向常量T
。您可以写入p
(使其指向不同的对象),但您无法写入*p
(您无法更新事物p
指向的值。)
T * const p // p is a constant pointer to T
这将p
声明为T
的常量指针;您可以写信至*p
(更新事件p
指向的值,假设*p
产生可修改的左值),但您无法写入p
(您可以& #39; t指向不同的对象。)
结束修改
所以
var -- var is a
var[3] -- 3-element array of
*var[3] -- pointer to
(*var[3])() -- function taking
(*var[3])() -- unspecified parameters
*(*var[3])() -- returning pointer to
(*(*var[3])())( ) -- function taking
(*(*var[3])())( ) -- unnamed parameter is a
(*(*var[3])())( * ) -- pointer to
(*(*var[3])())( (*)()) -- function taking
(*(*var[3])())( (*)()) -- unspecified parameters
(*(*var[3])())(void (*)()) -- returning void
int (*(*var[3])())(void (*)()); -- returning int
因此,var
是一个3元素的函数指针数组,每个函数返回一个指向另一个函数的指针(它指向另一个函数作为参数)返回int
。