如何声明指向2D数组的指针数组

Mif*_*eng 0 c++ arrays pointers multidimensional-array

我有一个2D数组列表:

float a[][9] = { ... }
float b[][9] = { ... }
float c[][9] = { ... }
Run Code Online (Sandbox Code Playgroud)

我想要另一个指向每个2D数组的指针数组,如下所示:

what_should_be_here?? arr[] = { a, b, c }
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

Naw*_*waz 6

使用typedef简化的声明.arr的每个元素都是float (*)[9].说这种类型是SomeType.那{a,b,c}意味着你需要一个包含三个元素类型的数组SomeType.

SomeType arr[] = {a,b,c};
Run Code Online (Sandbox Code Playgroud)

现在的问题是,什么SomeType?所以你走了:

typedef float (*SomeType)[9]; //SomeType is a typedef of `float (*)[9]`

SomeType arr[] = {a,b,c}; //this will compile fine now!
Run Code Online (Sandbox Code Playgroud)

正如我所说,用于typedef简化声明!

我会选择一个更好的名字SomeType:

typedef float (*PointerToArrayOf9Float)[9];

PointerToArrayOf9Float arr[] = {a,b,c}; 
Run Code Online (Sandbox Code Playgroud)

这是一个更长的名称,但它使代码可读!

请注意,如果没有typedef,您的代码将如下所示:

float (*arr[])[9] = {a,b,c};
Run Code Online (Sandbox Code Playgroud)

这是UGLY.这就是为什么我会重复:

使用typedef简化宣言!

希望有所帮助.