4 回答
TA貢獻2021條經驗 獲得超8個贊
向后讀(由順時針/螺旋規則驅動):
int*- 指向int的指針int const *- 指向const int的指針int * const- const指向int的指針int const * const- const指向const int的指針
現在第一個const可以在類型的任何一側,所以:
const int *==int const *const int * const==int const * const
如果你想變得非常瘋狂,你可以做這樣的事情:
int **- 指向int的指針int ** const- 指向int的指針的const指針int * const *- 指向int的const指針的指針int const **- 指向const int指針的指針int * const * const- 指向int的const指針的const指針...
并確保我們清楚const的含義
const int* foo;int *const bar; //note, you actually need to set the pointer //here because you can't change it later ;)
foo是一個指向常量整數的變量指針。這使您可以更改指向的內容,但不能更改指向的值。大多數情況下會看到C風格的字符串,其中有一個指向a的指針const char。您可以更改指向的字符串,但不能更改這些字符串的內容。當字符串本身位于程序的數據段中且不應更改時,這很重要。
bar是一個指向可以更改的值的常量或固定指針。這就像沒有額外語法糖的參考。因為這個事實,通常你會使用一個你將使用T* const指針的引用,除非你需要允許NULL指針。
TA貢獻1866條經驗 獲得超5個贊
我想這里已經回答了所有問題,但我只想補充一點,你應該小心typedefs!它們不僅僅是文本替換。
例如:
typedef char *ASTRING;const ASTRING astring;
類型astring是char * const,而不是const char *。這是我總是傾向于放在const類型右側的一個原因,而不是從一開始。
TA貢獻1802條經驗 獲得超5個贊
幾乎所有人都指出:
有什么區別const X* p,X* const p和const X* const p?
你必須從右到左閱讀指針聲明。
const X* p表示“p指向一個常數為X的X”:不能通過p更改X對象。
X* const p表示“p是指向非const的X的const指針”:您不能更改指針p本身,但可以通過p更改X對象。
const X* const p表示“p是指向X的常量指針”:您不能更改指針p本身,也不能通過p更改X對象。
TA貢獻1871條經驗 獲得超8個贊
常量參考:
對變量(此處為int)的引用,它是常量。我們主要將變量作為引用傳遞,因為引用的大小小于實際值,但是存在副作用,這是因為它就像實際變量的別名。我們可能會通過完全訪問別名來意外更改主變量,因此我們將其設置為常量以防止此副作用。
int var0 = 0;const int &ptr1 = var0;ptr1 = 8; // Errorvar0 = 6; // OK
常量指針
一旦常量指針指向變量,它就不能指向任何其他變量。
int var1 = 1;int var2 = 0;int *const ptr2 = &var1;ptr2 = &var2; // Error
指向常數的指針
一個指針,通過它可以不改變它指向的變量的值,這個指針稱為指向常量的指針。
int const * ptr3 = &var2;*ptr3 = 4; // Error
指向常量的常量指針
指向常量的常量指針是一個指針,既不能改變它指向的地址,也不能改變保存在該地址的值。
int var3 = 0;int var4 = 0;const int * const ptr4 = &var3;*ptr4 = 1; // Error ptr4 = &var4; // Error
- 4 回答
- 0 關注
- 1562 瀏覽
添加回答
舉報
