我在理解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]结合使用是什么?
答案 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];
然后我们将得到一个三维指针数组。
希望很清楚。