我该如何阅读以下声明?

How do I have to read the following statement?

本文关键字:声明 何阅读      更新时间:2023-10-16

我喜欢刷新我的C++技能,并尝试编写一个小对象,所以我得出了这个表达式:

int (*const vectors)[2];

我该如何阅读它?我知道它正在声明一个指向二维 int 数组的常量指针。

谢谢!

你应该使用螺旋规则来解析int (*const vectors)[2];

  • 从标识符vectors开始
  • 处理其右侧的一元运算符,从左到右,")"之前没有
  • 处理其左侧的限定符和一元运算符,从右到左:
    • const表示vectors是常量,则无法修改其值。
    • *表示指针:vector是一个常量指针
  • 跳过两侧的括号,重新开始:
    • [2]表示2 的数组vector是指向一个或多个 2 个数组的常量指针
    • 最后: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指向不应修改的 2D 矩阵(例如作为函数参数),则声明应为:

void print_matrix(const int (*vectors)[2]);

void print_matrix(int const (*vectors)[2]);

最后,const在 C 和 C++ 中的含义存在细微差异,但上述解析方法适用于这两种语言。

在声明中,前缀*和后缀[]都是修改标识符(或声明符)的运算符。

问题是[]的优先级高于*,所以如果你省略了括号,你会将vectors声明为数组大小为 2 的int * const

需要括号才能使vectors成为指向int [2]的常量指针。