【发布时间】:2021-07-06 10:08:12
【问题描述】:
我对 C++ 还是很陌生,我一直在尝试使用该语言来尝试理解其中的大部分内容。 我最近开始研究 2d 数组,我完全理解指向数组的指针数组(在堆上创建),但我对下面的代码比较困难。
int arr2d[3][2] = {
{1, 2},
{3, 4},
{5, 6}
};
我知道在内存中,它充当一维数组,但我不明白指针如何与它们一起工作。我尝试将 arr2d 分配给一个 int 指针,但它不起作用。所以我尝试了 auto 关键字。
int* a = arr2d; // throws an error
auto a = arr2d; // auto = int(*a)[2]
在 Visual Studio 中将鼠标悬停在“a”上时,它会给出 int(*a)[2] 类型。这是我真的不明白。
我已查找文档,但在任何地方都找不到此语法。有人可以向我解释一下该指针类型的作用以及如何使用任何 n 维数组重新创建它吗?
谢谢!
【问题讨论】:
-
n 维数组更好地实现为一维数组 (int*) 或向量,如果您要在 c++ 中执行它们。然后,您使用乘法对数组进行手动数组索引。如果这是您想要达到的目标?
-
不,我只是想了解该语言的工作原理。我知道做数组的最好方法是做一维数组,但我只是好奇这些指针是什么。
-
你需要一个指向 int 类型指针的指针,例如: int** a = arr2d;或者像悬停的代码一样,它是一个指向包含 2 个元素的 int 类型数组的指针。 a[0] 和 *a 将访问第一行, a[0][0] 和 *(*(a+0)+0) 与 **a 等价将访问第一行第一列。
-
@ai2ys 只能在 C 中工作 gcc 会为 C++ 发出警告。我的意思是
int** a = arr2d;
标签: c++ arrays pointers multidimensional-array