int * const const * b
「int * const const * b」是什麼意思?
這是什麼意思? cdecl說declare b as pointer to const const pointer to int
。 有人可以解釋它嗎?
int * const const * b
「int * const const * b」是什麼意思?
這是什麼意思? cdecl說declare b as pointer to const const pointer to int
。 有人可以解釋它嗎?
const const
是多餘的,它會減少到const
。
讓我們重寫:
int * const *b;
所以b
是一個指向一個常量指針爲int。用一個例子:
int main(int argc, char **argv) {
int i = 5;
int *ip = &i;
int * const const * b = &ip;
(**b)++; /* legal */
(*b)++; /* illegal */
(b)++; /* legal */
return 0;
}
另見that question,這是有效的C99,但不是有效的C++也不有效C89。
它只是一個指向const指針的指針。 Const適用於左邊的內容,除非它的左邊沒有內容:然後它適用於右邊。
這裏你只是有冗餘redundancy,這是重複的,你真的確定它是const並且不會變異。
這裏你只是有冗餘redundancy,這是重複的,你真的確定它是const並且不會變異。
即使cdecl.org告訴b is pointer to const const pointer to int
。
它是相同的:
int * const * b;
這是一個指向const
指針int
。
const const
是C99/C11法律和相同const
:
(C99,6.7.3p4)「如果相同的預選賽出現在同一說明符限定符列表不止一次,無論是直接或通過一個或多個typedef,行爲就像它只出現一次一樣。「
但是,這是一個約束衝突中C89:
(C90,6.5.3)「同樣類型修飾符不得不止一次出現在同一說明符列表或預選賽名單,無論是直接或者通過一個或多個typedef。「
這基本上是一個int **
或指針的指針爲int 或一個指向int數組(其中int *
是引用一個int[]
的const
位於後int *
裝置的方式指針不能被修改(儘管它的內容可以),這與const int *
相反
第二個const
被超級忽略和忽略。
混淆聲明的一般解決方案:反向讀取。雖然在這種情況下,您應該先刪除冗餘const
。
所以這個:
int * const * b;
變爲:
b // b is a
* // pointer to
const // a constant
* // pointer to
int // an int
在英語中,因此:一個指向一個常量指針爲int。
正如其他人所提到的,這是int **
的一個版本。