如何读取函数指针

How to read the function pointer?

本文关键字:函数 指针 读取 何读取      更新时间:2023-10-16

如何解释下面的 c++ 声明?

int (*(*x[2])())[3]; 

这是来自类型cpp首选项中的示例。

问题中示例声明的解释存在于链接的 Type-cpp首选项页面中。

int (*(*x[2])())[3];      // declaration of an array of 2 pointers to functions
                          // returning pointer to array of 3 int

因此,实际的问题不是关于那个案例,而是关于如何解读任何C++声明。

您可以推断所有这些详细信息,从声明的名称开始,x并顺时针移动括号。您将得到上面的描述:

x 是一个指向函数的指针的第 2 维数组,该函数返回指向整数的维数 3 的数组的指针。

这里更好地解释为顺时针/螺旋规则:http://c-faq.com/decl/spiral.anderson.html

它是一个由

两个指针组成的数组,指向返回指向类型为 int[3] 且没有参数的数组的指针。

这是一个演示程序

int ( *f() )[3] { return new int[2][3]; }
int ( *g() )[3] { return new int[4][3]; }
int main() 
{
    int (*(*x[2])())[3] = { f, g };
    for ( auto func : x ) delete []func();
    return 0;
}