使用双指针声明2D数组

Declaring a 2D array using double pointer

本文关键字:2D 数组 声明 指针      更新时间:2023-10-16

我对c++程序中的这一行感到困惑。该程序的思想是检查4x4数组是否对称。这部分代码声明了一个2D数组,我不明白。

int** array = new int*[n];

虽然,还有另一个类似的问题,但它是关于我得到的单指针。

int *array = new int[n];

我不理解双指针。请解释。

如何创建单个指针数组?你这样做:

int* myArray = new int[n];

这是什么意思?它有两部分。第一部分是保留一个指针int*,我们称之为myArray,第二部分是保留n个元素,每个元素的大小为int在内存中(这是一个数组,对吧?),你取该数组的地址并将其保存在变量myArray中。

现在你想要一个2D数组,它是一个数组的数组。所以这个新的数组的数组的每个元素都是这些中的一个,我们在上面讨论过的。我们如何预订?我们所做的:

new int*[n];

因为我们保留了n插槽,每个插槽的类型都是int*,正如我们之前所说的。

返回值的类型是什么?它是数组的数组,或者是"指向数组的指针,后者也是指向数组的指针",所以写成

(int*)*

int**

变成

int** array = new int*[n];

int** array是指向int的指针的指针。通过这样做:

int** array = new int*[n];

你正在创建一个存储nint*指针的内存区,并将array指向该内存。对于您已经创建的每一个指针,都可以创建一组int,如下所示:

for (auto i = 0; i < n; ++i)
    array[i] = new int[n];

结果内存看起来像这样:

array -> [       int*     |     int *     |   .... n
         [int | int | ...][int | int | ...][  ... n

然而,如果你在c++中使用std的一些东西,即std::vector:

,这就容易得多了。
std::vector<std::vector<int>> arr(std::vector<int>(0, n), n);