首页 > 解决方案 > 我如何阅读以下声明?

问题描述

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

int (*const vectors)[2];

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

谢谢!

标签: c++c

解决方案


您应该使用螺旋规则来解析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,但上述解析方法适用于两种语言。


推荐阅读