c++ - 我如何阅读以下声明?
问题描述
我喜欢刷新我的 C++ 技能并尝试编写一个小对象,所以我想到了这个表达式:
int (*const vectors)[2];
我该如何阅读?我知道它声明了一个指向二维 int 数组的常量指针。
谢谢!
解决方案
您应该使用螺旋规则来解析int (*const vectors)[2];
:
- 从标识符开始
vectors
- 处理其右侧的一元运算符,从左到右,在 ')` 之前没有。
- 从右到左处理其左侧的限定符和一元运算符:
const
手段vectors
是恒定的,你不能修改它的值。*
表示指针:vector
是一个常量指针
- 跳过两边的括号,重新开始:
[2]
表示2 的数组。vector
是指向一个或多个 2 数组的常量指针- finally:
int
给出内部元素类型。
vector
是指向一个或多个 2 数组的常量指针int
。
因此vector
可以指向一个 2 的数组int
。例如,您可以使用vector
以下方式操作 2D 矩阵:
// allocate a 2D identity matrix:
int (*const vectors)[2] = malloc(sizeof(int[2][2]);
vectors[0][0] = vectors[1][1] = 1;
vectors[1][0] = vectors[0][1] = 0;
但是请注意,vectors
必须初始化,而不是分配,因为它被定义为const
. 如果您打算vectors
指向不应修改的二维矩阵,例如作为函数参数,则声明应为:
void print_matrix(const int (*vectors)[2]);
或者
void print_matrix(int const (*vectors)[2]);
最后,C 和 C++ 中的含义存在细微差别const
,但上述解析方法适用于两种语言。
推荐阅读
- c# - 从另一个类而不是新创建的 C# WPF 更新 Window 的当前实例
- javascript - 函数不同步运行
- java - 我们如何解决 Android Studio 中的“无法解析符号”问题?
- php - PHP | 如何使用唯一标志对数组中的值进行排序?
- assembly - 如何在 cortex m3 中进行 32*32 位乘法
- java - 如何使用 SpEL 设置注释字段以处理值
- java - 测试 bean 实例化会引发异常
- android - 我应该如何确定图像的分辨率?
- mysql - Springbatch 在使用分区步骤时遇到 EmptyResultDataAccessException
- windows - Windows-10 电池指示器 Visual Basic 脚本