我在理解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]结合使用会产生什么?
也许最好的理解方法是比较带括号和不带括号的声明示例。就像在表达式中一样,方括号用于影响声明各个部分的优先级。
例如,从简单开始,
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)
那么我们将有一个三维数组的指针。
希望这很清楚。