new int [M] [N]的类型是什么?

Sla*_*zer 3 c++ arrays dynamic multidimensional-array c++11

根据typeid(array).name()它是PAN_i在G ++ 4.8.4.我知道P意味着指针和i意味着int,但是什么类型是什么A,为什么只有第二个维度N- 而不是第一个 - M.

我应该输入什么而不是自动输入auto array = new int[M][N]

是否有分配的方式arrayint**

另一个问题是M和N必须是编译时常量.如果他们不是,我想我唯一的选择是动态C++ 03 2D阵列.

jua*_*nza 5

new int [M] [N]的类型是什么?

该类型是指向Nint 1的长度数组的指针,或

int (*)[N]
Run Code Online (Sandbox Code Playgroud)

如果您考虑new[]表达式的作用,它会初始化一个在运行时给定的长度数组,并返回指向该数组的第一个元素的指针.所以的类型

new T[M]
Run Code Online (Sandbox Code Playgroud)

T*.在2D情况下,您可以将其T视为存在int[N].因此,数组的每个元素都是一个自身数组,并new返回指向其第一个元素的指针.这可能是一种更清晰的表达方式:

typedef int ArrayN[N];

auto array = new ArrayN[M];
Run Code Online (Sandbox Code Playgroud)

1在C++中,C样式数组的维度必须是编译时常量,意味着N必须是常量表达式