描述:int(*(* var [3])())(void(*)());

时间:2016-09-06 11:55:17

标签: c variable-declaration

int (*(*var[3])())(void (*)());

您如何描述上述声明中的var类型?

我明白了:

将var声明为函数(A)的3个指针的数组

  • 这些函数(A)接受任何输入并返回指向函数的指针(B)

  • 这些函数(B)采用指向函数(C)的指针并返回int

  • 这些函数(C)接受任何输入并且不返回任何内容

这是对的吗? 感谢

1 个答案:

答案 0 :(得分:3)

从最左边的标识符开始,逐步解决问题,记住()之前[]*绑定,所以:

T *a[N]      // a is an array of pointer to T
T (*a)[N]    // a is a pointer to an array of T
T *f()       // f is a function returning pointer to T
T (*f)()     // f is a pointer to a function returning T

修改

虽然它没有出现在这个声明中,const可以引入自己的皱纹:

T const *p   // p is a pointer to constant T
const T *p   // same as above

在这两种情况下,p都指向常量T。您可以写入p(使其指向不同的对象),但您无法写入*p(您无法更新事物p指向的值。)

T * const p  // p is a constant pointer to T

这将p声明为T的常量指针;您可以写信至*p(更新事件p指向的值,假设*p产生可修改的左值),但您无法写入p(您可以& #39; t指向不同的对象。)

结束修改

所以

        var                      -- var is a
        var[3]                   -- 3-element array of
       *var[3]                   -- pointer to
      (*var[3])()                -- function taking 
      (*var[3])()                --   unspecified parameters 
     *(*var[3])()                -- returning pointer to
    (*(*var[3])())(          )   -- function taking
    (*(*var[3])())(          )   --   unnamed parameter is a
    (*(*var[3])())(      *   )   --   pointer to
    (*(*var[3])())(     (*)())   --   function taking
    (*(*var[3])())(     (*)())   --     unspecified parameters
    (*(*var[3])())(void (*)())   --   returning void
int (*(*var[3])())(void (*)());  -- returning int

因此,var是一个3元素的函数指针数组,每个函数返回一个指向另一个函数的指针(它指向另一个函数作为参数)返回int