使用双指针声明2D数组

时间:2016-09-08 17:52:57

标签: c++

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

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

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

int *array = new int[n];

我不明白双指针。请解释一下。

2 个答案:

答案 0 :(得分:3)

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

int* myArray = new int[n];

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

现在你想要一个2D数组,它是一个数组的数组。所以这个新数组的每个元素都是其中之一,我们在那里讨论过。我们如何保留这个?我们这样做:

new int*[n];

因为我们正在预留n个广告位,每个广告位都有类型int*,我们之前已经讨论过。

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

(int*)*

或者

int**

所以它变成了

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

答案 1 :(得分:2)

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

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

您正在创建一段内存,其中包含n int*个指针,并指向该内存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);

你完成了......