您可以在其中编写数组[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。还有吗?每个人的利弊是什么?他们的执行/处理速度如何?
(这是一个面试问题。所以,不仅仅是建议最优化的方法,我需要知道每种方法的作用)
答案 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];
rowCount
和colCount
等于3和3,
比在内存中分配的数组和索引:
|0|1|2| ... |0,0|0,1|0,2| ... |1,0|1,1|1,2| ... |2,0|2,1|2,2|
| | | ^ ^ ^
| | -------- | |
| ---------------------------- |
------------------------------------------------