【问题标题】:A pointer to a multidimensional array [duplicate]指向多维数组的指针[重复]
【发布时间】:2014-12-11 01:01:31
【问题描述】:

我在创建指向多维列表的指针时遇到问题。在单个数组的情况下 - 输出应该是没有问题的。在多维数组的情况下 - 生成错误消息。

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    const int ROWS = 3, COLS = 4;
    int list[ROWS][COLS] = { {4, -3, 5, 6}, {5, 1, 7, 2},{-4,6,10,-8}};
    int list2[] = {3, 6, 9, 2};

    int *plist = list;
    int *plist2 = list2;

    for (int row = 0; row < ROWS; row++)
    {
        for (int col = 0; col < COLS; col++)
            cout << setw(4) << list[row][col] << " ";

        cout << endl;
    }

    cout <<  *plist  << endl;
    cout <<  *plist2  << endl;
    return 0;
}

main.cpp:11:14:错误:初始化时无法将“int ()[4]”转换为“int
int *plist = 列表;

【问题讨论】:

  • 这段代码中没有任何指向数组的指针。只有int 的一维和二维数组以及指向int 的指针。一维数组衰减为int *,因此可以分配给plist。二维数组衰减为指向数组的指针 (int (*)[COLS]),这与 int * 不兼容。你可以改写int *plist = list[0];int *plist = &amp;list[0][0];
  • int *plist = list; 行根本没有意义,您的编译器正在尽其所能告诉您。 list 是一个 int 数组的数组,因此它衰减为指向第一个元素的指针,即指向 int 数组的指针,而不是指向 int 的指针。像午夜一样平淡。
  • 更好:for (auto const &amp; row : list) { for (int v : row) { std::cout &lt;&lt; v &lt;&lt; ' '; } std::cout &lt;&lt; '\n'; }
  • 当您想引用数组(一维)中的变量时,您指定指针并将其设置为等于数组名称 - 说这是该数组开始指向的内存位置。我想对二维数组做同样的事情。从这里开始/指向这里。就是这样。
  • @YelizavetaYR 然后选择int (*plist)[COLS] = list;

标签: c++ arrays multidimensional-array


【解决方案1】:

这实际上取决于您要做什么,但是 2D 数组不能衰减为单个指针。例如,指向数组的指针会起作用,让第一个维度衰减为指针:

int (*plist)[COLS] = list;

然后您可以使用plist[i][j] 访问这些元素。

还要小心使用诸如list 之类的名称,尤其是当您做一些冒险的事情时,例如说using namespace std;

【讨论】:

  • 我要做的是一个指向二维数组中元素的指针。
  • @YelizavetaYR 无论如何一步都行不通。
  • @YelizavetaYR 您可以访问它们:plist[2][3]
  • 是的,我知道可以使用 plist[2][3] 想法是我想使用指针 - 我希望能够使用内存位置 - 并访问数据数组。
  • @YelizavetaYR plist 一个指针。它是一个指向数组的指针。您不能使用单个 int * 遍历数组的所有元素(当您访问第一个数组的越界时,即使该数组在内存中是连续的,也会导致未定义的行为。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
相关资源
最近更新 更多