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

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

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

你会如何描述上面声明中的 var 类型?

我得到:

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

这样对吗? 谢谢

从最左边的标识符开始,然后继续前进,记住 ()[]* 之前绑定,所以:

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(您可以'让它指向不同的对象)。

结束编辑

所以

        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 元素数组,每个 returns 一个指向另一个函数的指针(它接受一个指向 另一个函数的指针 作为参数)即 returns int.