2012-02-24 127 views

回答

2

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; 
} 
2

另見that question,這是有效的C99,但不是有效的C++也不有效C89。

它只是一個指向const指針的指針。 Const適用於左邊的內容,除非它的左邊沒有內容:然後它適用於右邊。

這裏你只是有冗餘redundancy,這是重複的,你真的確定它是const並且不會變異。

這裏你只是有冗餘redundancy,這是重複的,你真的確定它是const並且不會變異。

即使cdecl.org告訴b is pointer to const const pointer to int

0

它是相同的:

int * const * b; 

這是一個指向const指針int

const const是C99/C11法律和相同const

(C99,6.7.3p4)「如果相同的預選賽出現在同一說明符限定符列表不止一次,無論是直接或通過一個或多個typedef,行爲就像它只出現一次一樣。「

但是,這是一個約束衝突中C89:

(C90,6.5.3)「同樣類型修飾符不得不止一次出現在同一說明符列表或預選賽名單,無論是直接或者通過一個或多個typedef。「

0

這基本上是一個int ** 或指針的指針爲int 或一個指向int數組(其中int *是引用一個int[]

const位於後int *裝置的方式指針不能被修改(儘管它的內容可以),這與const int *相反

第二個const被超級忽略和忽略。

2

混淆聲明的一般解決方案:反向讀取。雖然在這種情況下,您應該先刪除冗餘const

所以這個:

int * const * b; 

變爲:

b  // b is a 
*  // pointer to 
const // a constant 
*  // pointer to 
int // an int 

在英語中,因此:一個指向一個常量指針爲int。

正如其他人所提到的,這是int **的一個版本。

相關問題