多维数组声明在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];

多维数组声明在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];,c++,C++,这个声明有什么作用 尤其是那部分 (*colorMapping[LAYER_SIZE]) 对我来说很困惑-这是什么意思?它与[ROWS][COLS]组合在一起意味着什么?也许最好的理解方式是比较带括号和不带括号的声明示例。就像在表达式中一样,括号用于影响声明各个部分的优先级 比如说从简单开始, int* array[10]; 是一个由十个指针组成的数组。但是如果你想要一个指向数组的指针而不是指针数组呢?那就是 int (*ptr)[10]; 括号表示ptr首先是一个指针,只有当该指针被取消

这个声明有什么作用

尤其是那部分

(*colorMapping[LAYER_SIZE])

对我来说很困惑-这是什么意思?它与[ROWS][COLS]组合在一起意味着什么?

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

比如说从简单开始,

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];
然后我们会有一个三维的指针数组


希望这是清楚的。

颜色映射似乎是一个大小为LAYER\u size的指针数组,每个指针都指向一个大小为COLS的二维数组(矩阵),其中值的大小为byte。相关:替换常量,并使用标准类型而不是
byte
,他说“将colorMapping声明为指向常量字符数组10的数组5的指针数组3”感谢您的全面回答。这意味着:有一个定义为LAYER_SIZE的常量数组,其中包含指向维度为[ROW][COL]的二维数组的指针,其中(矩阵的)每个元素保存一个字节?@asterix是的。什么是常量是字节。指针不是常量(你需要
静态常量字节(*const colorMapping[LAYER_SIZE])[ROWS][COLS];
),谢谢你,这为我澄清了问题!C/C++语法有时真的很难理解!