C中这个奇怪的函数指针声明是什么意思?
任何人都可以解释这个int ((*foo(int)))(int)
吗?
int (*fooptr)(int); int ((*foo(int)))(int); // Can't understand what this does. int main() { fooptr = foo(0); fooptr(10); }
。
int ((*foo(int)))(int);
这将foo
声明为一个函数,它需要一个int
类型的参数,并返回一个指向函数的指针,该函数需要一个int
类型的参数并返回一个int
。
更清楚:
foo -- foo foo( ) -- is a function foo(int) -- taking an int argument *foo(int) -- returning a pointer (*foo(int))( ) -- to a function that (*foo(int))(int) -- takes an int argument int (*foo(int))(int) -- and returning an int
这是一个很好的解释。
foo
是我们宣布的。
foo(int)
它是一个带有单个int
参数的函数
*foo(int)
并返回一个指针
((*foo(int)))(int)
到一个带有单个int
参数的函数
int ((*foo(int)))(int)
并返回一个int
。
一对()
是多余的。 同样的事情可以表达为
int (*foo(int))(int)
已经有了答案,但我想以相反的方式接近它。
函数声明看起来与变量声明相同,只是变量名称被函数名称和参数替换。
所以这会将bar
声明为一个指向函数的指针,该函数接受一个int
并返回一个int
:
int (*bar)(int);
如果,而不是变量bar
,它是具有该返回值的函数foo(int)
,则用foo(int)
替换bar
并获取:
int (*foo(int))(int); // ^^^^^^^^ // this was "bar" before
添加一对不必要的括号,你会得到:
int ((*foo(int)))(int); // ^ ^ // extra parentheses
根据cdecl , foo
是:
声明foo为function(int)返回指向function(int)返回int的指针