使用双指针声明2D数组
Declaring a 2D array using double pointer
我对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];
你正在创建一个存储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);
相关文章:
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 使用指针算法修改函数中的 2D 数组
- 在C++中初始化和打印 2D 数组
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- C++ 2D 数组写入多个位置
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 如何从initializer_list初始化 2D 数组
- 交换函数不是在 C++ 中交换 2D 数组的元素