06000
不,这不起作用.
main.cpp:4: error: only the first dimension of an allocated array may have dynamic size
new int[size][size];
^~~~
如果行的大小是固定的,那么你可以这样做:
// allocate an array with `size` rows and 10 columns
int (*array)[10] = new int[size][10];
在C中,您不能拥有两个维度的原始数组,其中两个维度都是动态的.这是因为原始数组索引按指针工作;例如,为了访问第二行,指向第一行的指针需要增加行的大小.但是当行的大小是动态的时,数组不知道该大小,因此C不知道如何弄清楚如何进行指针增量.
如果你想要一个具有多个动态维度的数组,那么你需要构造数组分配,以便C的默认数组索引逻辑可以处理它(例如this重复问题的最佳答案),或者你需要实现逻辑用于确定适当的指针增量.
对于每行具有相同大小的数组,我建议不要使用多个分配,例如那些答案建议,或使用向量向量.使用向量向量解决了手动执行分配的难度和危险性,但它仍然使用了比必要更多的内存,并且不允许更快的内存访问模式.
一种不同的方法,使多维数组扁平化,可以使代码像任何其他方法一样易于读取和写入,不使用额外的内存,并且可以执行更多,更好的操作.
扁平数组意味着您只使用与所需2D数组具有相同元素数的单个维数阵列,并执行算法以在多维索引和相应的单维索引之间进行转换.新的看起来像:
int *arr = new int[row_count * column_count];
第i行,第2列中的列j对应于arr [column_count * i j]. arr [n]对应于行n / column_count和列n%column_co