我对C ++程序中的这一行感到困惑。该程序的想法是检查4x4
数组是否对称。这部分代码声明了一个2D数组,我不明白。
int** array = new int*[n];
虽然,还有另外一个与此相似的问题,但它是关于我得到的单指针。
int *array = new int[n];
我不明白双指针。请解释一下。
答案 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);
你完成了......