【问题标题】:Meaning of multi-dimensional array declaration in C++C++中多维数组声明的含义
【发布时间】:2019-06-07 06:08:13
【问题描述】:

我在理解 C++ 中的以下多维数组声明时遇到了问题。

static const byte LAYER_SIZE = 3;
static const byte ROWS = 5;
static const byte COLS = 10;

static const byte (*colorMapping[LAYER_SIZE]) [ROWS][COLS];

这个声明有什么作用?

尤其是部分

(*colorMapping[LAYER_SIZE])

让我感到困惑 - 这是什么意思以及它与 [ROWS][COLS] 的组合是什么?

【问题讨论】:

  • 颜色映射似乎是一个大小为 LAYER_SIZE 的指针数组,每个指针都指向一个大小为 ROWS COLS 的二维数组(矩阵),其中值的大小为字节。
  • 替换常量,并使用标准类型而不是bytethis 表示“将 colorMapping 声明为指向 const char 的数组 10 的数组 5 的指针的数组 3”

标签: c++


【解决方案1】:

也许最好的理解方法是比较带括号和不带括号的声明示例。就像在表达式中,括号用于影响声明各个部分的优先级

例如,从简单开始,

int* array[10];

是一个由十个指针组成的数组。但是如果你想要一个指向数组的指针而不是指针数组呢?那是

int (*ptr)[10];

括号表示ptr首先是一个指针,只有当指针被取消引用时,你才能到达数组。

所以这个例子

int* (array[10]);

与第一个示例相同。多余的括号清楚地表明array 首先是一个数组,并且只有当您到达数组的元素时,您才有一个指针。上面的例子说明的是,在声明中(就像在表达式中一样)[]* 具有更高的优先级,如果你想反过来,你必须使用括号。

所以回到原来的例子

static const byte (*colorMapping[LAYER_SIZE]) [ROWS][COLS];

首先查看括号内部,我们有一个指针数组(就像我上面的第一个示例一样)。然后查看括号外,我们看到每个指针都指向一个二维数组。

如果我们错过了括号

static const byte *colorMapping[LAYER_SIZE][ROWS][COLS];

那么我们就会有一个指针的三维数组。

希望这很清楚。

【讨论】:

  • 感谢您的全面回答。所以这意味着:有一个定义了 LAYER_SIZE 的常量数组,其中包含指向 [ROW][COL] 维度的二维数组的指针,其中每个元素(矩阵的)都包含一个字节?
  • @asterix 没错。不变的是字节。指针不是恒定的(你需要static const byte (*const colorMapping[LAYER_SIZE])[ROWS][COLS];)。
  • 谢谢,这为我澄清了问题! C/C++ 语法有时真的很难理解!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2020-03-06
  • 2016-11-05
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2020-07-21
相关资源
最近更新 更多