4
int (*(*q)(int (*)()))();

好的,我从: q 是一个指向函数的指针,它接受... ,它不接受任何内容并返回 int。

4

4 回答 4

2

诀窍是它q本身是一个函数指针,它返回接受一个函数指针。cdecl说:

将 q 声明为指向函数的指针(指向返回 int 的函数的指针)返回指向返回 int 的函数的指针

于 2013-06-13T21:12:02.577 回答
1

你说的对。

q 是指向函数的指针,传递指向函数的指针(不传递返回 int)返回指向函数的指针(不传递返回 int)。

看这里。 http://c-faq.com/decl/spiral.anderson.html

于 2013-06-13T23:09:08.907 回答
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)。

于 2013-06-14T04:54:43.953 回答
1

找到最左边的标识符,然后记住这是一个指针数组,是一个指向*a[]数组的指针,是一个返回指针的函数,是一个指向函数的指针。请记住,在原型中您只需要提供参数的类型;声明为一个接受单个参数的函数;声明为将单个指针作为参数的函数。同样,声明为一个函数,该函数将指向数组的指针作为参数。将这些规则递归地应用于函数中的任何参数。(*a)[]*f()(*f)()int f( int );fintint f( int * );fintint 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
于 2013-06-14T04:36:37.930 回答