int (*(*q)(int (*)()))();
好的,我从: q 是一个指向函数的指针,它接受... ,它不接受任何内容并返回 int。
诀窍是它q
本身是一个函数指针,它返回并接受一个函数指针。cdecl
说:
将 q 声明为指向函数的指针(指向返回 int 的函数的指针)返回指向返回 int 的函数的指针
你说的对。
q 是指向函数的指针,传递指向函数的指针(不传递返回 int)返回指向函数的指针(不传递返回 int)。
根据 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)。
找到最左边的标识符,然后记住这是一个指针数组,是一个指向*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