c++ - 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] 的结合是什么?
解决方案
也许最好的理解方法是比较带括号和不带括号的声明示例。就像在一个表达式中,括号被用来影响声明各个部分的优先级。
例如,从简单开始,
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];
那么我们将有一个指针的三维数组。
希望这很清楚。
推荐阅读
- vba - 如何在 Visio 中为批量“适合绘图”操作编写宏?
- android - 两个生产者一个表面
- xml - 为小部件 Magento2 插入新容器选项
- vue.js - 对 Vee-Validate 使用 v-model 而不是 name 属性
- javascript - 通过 cy.request 在 mailcatcher 中获取电子邮件
- facebook - Facebook分享更改域名
- ios - iOS - iPhone 应用程序无法放大以适应 iPad 屏幕
- html - 如何从跨度标签中抓取在线数据
- c# - “如何修复 webhook 接收器的 hasura 中的‘发生错误’错误”
- json - Bash grep JSON 响应