我该如何阅读以下声明?

时间:2019-04-07 08:51:42

标签: c++ c

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

int (*const vectors)[2];

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

  • 从标识符vectors
  • 开始
  • 在其右边处理一元运算符,从左到右,在')`之前没有任何运算符。
  • 从左到右处理左侧的限定符和一元运算符:
    • const表示vectors是常量,您不能修改其值。
    • *表示指针: vector是常量指针
  • 跳过两边的括号,然后重新开始:
    • [2]表示 2的数组 vector是一个常量指针,指向一个或多个2的数组
    • 最后:int给出内部元素类型。

vector是指向2个int的一个或多个数组的常量指针。

因此,vector可以指向2个int的数组。例如,您可以使用vector这样操作2D矩阵:

//分配2D身份矩阵:   int(* const向量)[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]);

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

答案 1 :(得分:0)

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

问题是[]的优先级比*高,因此,如果省略括号,则可以将vectors声明为int * const的数组大小2。

需要使用括号来使vectors成为指向int [2]的const指针。