C ++中多维数组声明的含义

时间:2019-06-07 06:08:13

标签: 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]结合使用是什么?

1 个答案:

答案 0 :(得分:7)

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

例如,从简单开始,

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

然后我们将得到一个三维指针数组。

希望很清楚。