[英]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.