指向多维数组 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++ 的指针的主要内容,如果未能解决你的问题,请参考以下文章

多维数组与指针

将嵌套 C++ 向量作为内置样式的多维数组传递

初始化指向多维数组的动态指针的正确方法? [复制]

C++中的指针和多维数组

第34课 多维数组和多维指针

第34课 多维数组和多维指针