我喜欢刷新我的C ++技能,并尝试对一个Object进行编程,所以我想到了这个表达式:
int (*const vectors)[2];
我如何阅读?我知道这是在声明一个指向二维int数组的常量指针。
谢谢!
答案 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指针。