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

ast*_*rix 2 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];
Run Code Online (Sandbox Code Playgroud)

该声明有什么作用?

特别是部分

(*colorMapping[LAYER_SIZE])
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑-这是什么意思,与[ROWS] [COLS]结合使用会产生什么?

joh*_*ohn 7

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

例如,从简单开始,

int* array[10];
Run Code Online (Sandbox Code Playgroud)

是十个指针的数组。但是,如果您想要一个指向数组而不是指针数组的指针怎么办?那会是

int (*ptr)[10];
Run Code Online (Sandbox Code Playgroud)

该括号表示ptr是首先一个指针,而且只有当指针被废弃,你能数组。

所以这个例子

int* (array[10]);
Run Code Online (Sandbox Code Playgroud)

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

因此,转到原始示例

static const byte (*colorMapping[LAYER_SIZE]) [ROWS][COLS];
Run Code Online (Sandbox Code Playgroud)

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

如果我们错过了括号

static const byte *colorMapping[LAYER_SIZE][ROWS][COLS];
Run Code Online (Sandbox Code Playgroud)

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

希望这很清楚。