1

我在作业中有一个问题,我使用以下方式定义二维数组:

// Allocating two two-dimensional matrix
int** matrix1 = new int*[rows];
for( int i=0; i!=rows; ++i )
matrix1[i] = new int[cols];
int** matrix2 = new int*[rows];
for( int i=0; i!=rows; ++i )
matrix2[i] = new int[cols];

我发现很难理解这种方法,即使在完成课程后,我也觉得这太令人困惑了。我在这学期通过在互联网上找到一种更简单的方法来管理,但我真的很想知道这里到底发生了什么。

有人可以用尽可能简单的词来解释吗?谢谢!

4

2 回答 2

2

我认为这张图片很好地解释了它是如何组合在一起的。array成为你的矩阵之一。

在此处输入图像描述

matrix1指向一个指针数组(行),其中每个指针都指向一个整数数组(列)。

于 2013-04-12T00:37:47.363 回答
1

动态二维数组基本上是一个指针数组,从语法上讲,它是:

int** matrix1; //for integer 2D array

matrix1是一个array of pointers指向 int 的。int 数组衰减到int*. 因此,您具有上述语法。为了更好地理解它,请考虑如何处理动态一维数组,如下所示:

int* A = new int[SIZE_OF_ARRAY];

这里,A是类型,如果是编译时间常数int*,它在功能上类似于静态数组。现在假设您有另一个静态数组,带有和编译时常量,但是,如果这些数组大小值在编译时不是常量,则需要动态分配内存,因此对于,您必须做与您相同的事情:A[SIZE_OF_ARRAY]SIZE_OF_ARRAYB[ROWS][COLS]ROWSCOLSBmatrix1

int **B;

要分配内存,你必须先 allocate how many pointers the array of pointers store,同时,你还需要分配内存for how many int elements each pointer points to,所以你需要嵌套的 for 循环来实现这个目的。

在 C++ 中,最好使用vector<vector<int>>替换int** matrix1.

您可以在这里查看二维数组的内存布局:http ://www.fredosaurus.com/notes-cpp/arrayptr/23two-dim-array-memory-layout.html

于 2013-04-12T00:32:36.420 回答