在C ++中声明2D数组有哪些不同的方法?

时间:2017-01-21 02:01:58

标签: c++ arrays multidimensional-array

您可以在其中编写数组[rowSize] [colSize]。另一个你将它声明为使用new的数组指针数组。 (来自How do I declare a 2d array in C++ using new?

int** ary = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
  ary[i] = new int[colCount];

应该有一个使用malloc。还有吗?每个人的利弊是什么?他们的执行/处理速度如何?

(这是一个面试问题。所以,不仅仅是建议最优化的方法,我需要知道每种方法的作用)

2 个答案:

答案 0 :(得分:0)

我不完全理解这里的问题,但我可以告诉你两者之间的区别。当使用new(或malloc)时,变量不在堆栈中。声明变量时:

int iarray[10][10];

它使用堆栈空间。使用new运算符的缺点是你必须记住也使用delete []运算符。

答案 1 :(得分:0)

有不同的类型:

1。这是一个数组,其中每个元素本身就是一个数组:

int array[rowSize][colSize];

就像这样:

typedef int A[colSize];
A array[rowSize];

其中sizeof(A)colSize*sizeof(int) sizeof(array)rowSize*sizeof(A)

[3] [3]的内存元素索引:

|0,0|0,1|0,2|1,0|1,1|1,2|2,0|2,1|2,2|

2. 这是指向指针的指针:

int** ary

其中ary可以引用指针数组 其中每个元素可以引用任何大小的int数组。 指针的大小取决于机器。

它在示例中初始化为poiner数组。之后,它的每个元素都被初始化为newely创建的数组。

对于你的例子:

int** ary = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
  ary[i] = new int[colCount];

rowCountcolCount等于3和3, 比在内存中分配的数组和索引:

|0|1|2| ... |0,0|0,1|0,2| ... |1,0|1,1|1,2| ... |2,0|2,1|2,2|
 | | |       ^                 ^                 ^
 | | --------                  |                 |
 | ----------------------------                  |
 ------------------------------------------------