有人可以解释一下这里的int ((*foo(int)))(int)
吗?
int (*fooptr)(int);
int ((*foo(int)))(int); // Can't understand what this does.
int main()
{
fooptr = foo(0);
fooptr(10);
}
答案 0 :(得分:37)
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
Here对此也是一个很好的解释。
答案 1 :(得分:13)
foo
是我们宣布的内容。
foo(int)
这是一个只需要int
个参数的函数
*foo(int)
并返回一个指针
((*foo(int)))(int)
到一个带有int
个参数的函数
int ((*foo(int)))(int)
并返回int
。
一对()
是多余的。同样的事情可以表示为
int (*foo(int))(int)
答案 2 :(得分:8)
已经有了答案,但我想以相反的方式接近它。
函数声明看起来与变量声明相同,只是变量名称被函数名称和参数替换。
因此,这将bar
声明为指向函数的指针,该函数接受int
并返回int
:
int (*bar)(int);
如果代替变量bar
,它是具有该返回值的函数foo(int)
,则将bar
替换为foo(int)
并获取:
int (*foo(int))(int);
// ^^^^^^^^
// this was "bar" before
添加一对不必要的括号,你得到:
int ((*foo(int)))(int);
// ^ ^
// extra parentheses
答案 3 :(得分:6)
根据cdecl,foo
是:
将foo声明为函数(int),返回指向函数(int)的指针,返回int