簡體   English   中英

我如何閱讀以下聲明?

[英]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的數組的常量指針
    • 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 ,而不是分配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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM