int (*(*q)(int (*)()))();
好吧,我开始:q是一个函数的指针,它需要...不确定接下来应该遵循什么,但也许它是...一个指向函数的指针,它不需要任何东西并返回int,并返回指针一个函数,它不需要任何东西并返回int。
答案 0 :(得分:2)
诀窍是q
本身是一个返回的函数指针,而是一个函数指针。 cdecl
说:
声明q作为函数的指针(指向函数返回int的指针)返回指向函数返回int的指针
答案 1 :(得分:1)
你是对的。
q是一个指向函数的指针,该函数传递指向函数的指针(不传递返回int)返回指向函数的指针(不传递返回int)。
答案 2 :(得分:1)
找到最左边的标识符,然后解决方法,记住*a[]
是一个指针数组,(*a)[]
是一个指向数组的指针,*f()
是一个返回指针的函数,而(*f)()
是指向函数的指针。请记住,在原型中,您只需要提供参数的类型; int f( int );
将f
声明为一个带有int
个参数的函数; int f( int * );
将f
声明为一个函数,它将一个int
指针作为参数。类似地,int f( int (*)[N] );
将f
声明为将指向数组的指针作为参数的函数。递归地将这些规则应用于函数中的任何参数。
因此:
q -- q
*q -- is a pointer to
(*q)( ) -- a function
(*q)( * ) -- that takes a pointer to
(*q)( (*)()) -- a function
(*q)(int (*)()) -- returning int
*(*q)(int (*)()) -- returning a pointer to
(*(*q)(int (*)()))() -- a function
int (*(*q)(int (*)()))(); -- returning int
答案 3 :(得分:1)
根据C编程语言中运算符的优先级和相关性。 您可以通过以下步骤了解它:
int (*(*q)(int (*)()))();
q->*->(int (*)())->*->()->int
1 2 3 4 5
1:q是一个指针
2:q是一个函数指针,它指向的函数有一个参数int(*)(),它也是一个函数指针,指向一个没有参数的函数,返回类型是int。
3:q是一个函数指针,它指向的函数有参数int(*)(),它也是一个函数指针,指向一个没有参数的函数,返回类型是int。和 q指向的函数有一个返回类型:指针。
4:q是一个函数指针,它指向的函数有参数int(*)(),它也是一个函数指针,指向一个没有参数的函数,返回类型是int。和 q指向的函数有一个返回类型:指针(这个指针也指向一个没有参数的函数)。
5:q是一个函数指针,它指向的函数有参数int(*)(),它也是一个函数指针,指向一个没有参数的函数,返回类型是int。和 q指向的函数有一个返回类型:指针(这个指针也指向一个没有参数的函数,函数的返回类型是int)。