[英]How do I have to read the following statement?
我喜欢刷新我的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
,而不是分配vectors
,因为它被定义为const
。 如果您希望vectors
指向不应修改的2D矩阵,例如作为函数参数,则声明应为:
void print_matrix(const int (*vectors)[2]);
要么
void print_matrix(int const (*vectors)[2]);
最后,C和C ++中const
的含义存在细微差别,但上面描述的解析方法适用于两种语言。
在声明中,prefix *
和postfix []
都是修改标识符(或声明符)的运算符。
问题是[]
优先级高于*
,所以如果你把parens排除在外,你会将vectors
声明为int * const
的数组大小2。
需要使用parens使vectors
成为int [2]
的const指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.