首页 > 解决方案 > C++中多维数组声明的含义

问题描述

我很难理解 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] 的结合是什么?

标签: c++

解决方案


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

例如,从简单开始,

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];

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

希望这很清楚。


推荐阅读