如何阅读此变量声明?

时间:2013-06-13 21:10:01

标签: c pointers declaration

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

好吧,我开始:q是一个函数的指针,它需要...不确定接下来应该遵循什么,但也许它是...一个指向函数的指针,它不需要任何东西并返回int,并返回指针一个函数,它不需要任何东西并返回int。

4 个答案:

答案 0 :(得分:2)

诀窍是q本身是一个返回的函数指针,而是一个函数指针。 cdecl说:

  

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

答案 1 :(得分:1)

你是对的。

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

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

答案 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)。