根据typeid(array).name()
,它在G ++ 4.8.4中为PAN_i
。我知道P
表示指针,i
表示int,但是A
是什么类型,为什么只有第二维 - N
- 而不是第一维 - {{1} }。
我应该在M
中输入什么内容而不是自动?
有没有办法将auto array = new int[M][N]
分配给array
?
另一个问题是M和N必须是编译时常量。如果不是,我想我唯一的选择是the dynamic C++03 2D arrays。
答案 0 :(得分:5)
new int [M] [N]的类型是什么?
该类型是指向int 1 的长度N
数组的指针,或
int (*)[N]
如果你想到new[]
表达式的作用,它会初始化一个在运行时给出的长度数组,并返回指向该数组的第一个元素的指针。
new T[M]
是T*
。在2D情况下,您可以将T
视为int[N]
。因此,数组的每个元素都是一个自身数组,new
返回指向其第一个元素的指针。这可能是一种更清晰的表达方式:
typedef int ArrayN[N];
auto array = new ArrayN[M];
1在C ++中,C样式数组的维度必须是编译时常量,意味着N
必须是常量表达式