指向多维数组 C++ 的指针
Posted
技术标签:
【中文标题】指向多维数组 C++ 的指针【英文标题】:Pointer to multidimensional array C++ 【发布时间】:2020-07-14 13:46:28 【问题描述】:我正在尝试了解如何将指针与多维数组一起使用(例如:2 维、3 维......)。我在网上看到了很多资源,但我似乎仍然无法理解它。语法也让我失望。以下这些语法是什么意思(为什么我们需要括号)?代码有什么作用以及它是如何工作的?谢谢!
示例 1
int (*array)[5] = new int[10][5];
示例 2
int c[3][2][2];
int (*p)[2][2] = c;
【问题讨论】:
int *array[5];
将array
定义为一个由五个指向int
的指针组成的数组。 int (*array)[5];
将 array
定义为指向由五个 int
值组成的数组的指针。
@Someprogrammerdude 是正确且非常简洁的。您可以在此here 上阅读更多信息。
这个玩具工具可以帮助找出带括号和不带括号的类型的不同含义:C gibberish ↔ English
【参考方案1】:
int (*arr)[5]
: arr
是指针,指向一个由 5 个整数组成的数组
int (*p)[2][2] = c;
: p
是一个指针,指向 2 个数组,每行有一个 2 个数组 ints
它是如何工作的?看下面这个简单的例子:
int (*array)[2] = new int[3][2];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
array[i][j] = i + j;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
cout << array[i][j] << ' ';
cout << '\n';
输出:
0 1
1 2
2 3
为什么我们需要括号?
考虑:
int *arr[3];
这里,arr
是一个大小为 3 的数组,可以存储 3 个指针。所以它是一个指针数组。见:
int a = 10;
int b = 20;
int c = 30;
arr[0] = &a; //arr[0] pointing to a
arr[1] = &b; //arr[1] pointing to b
arr[2] = &c; //arr[2] pointing to c
【讨论】:
以上是关于指向多维数组 C++ 的指针的主要内容,如果未能解决你的问题,请参考以下文章