C++ const與指標,以及頂層const和底層const
阿新 • • 發佈:2021-07-03
const與指標的組合,可能會稍微有點令人困擾。
const的作用是限定一個物件為常量,在定義const 物件後, 物件的值在程式中將不能被改變。
指標*是一種物件(用來儲存其他物件的記憶體地址),它可以指向另外一個物件。
如果const與指標組合起來,const是限定指標物件,還是限定指標指向的物件呢?
在primer C++ 中提到,const在*左邊,則限定指標指向變數為常量,const在*右邊,則限定指標變數為常量。
即:
int val1 = 0; int val2 = 1; const int * p = &val1;//p可變,*p為常量,不可變。 //int const * p = &val1;同上p = &val2;//可行 *p = 2;//不可行 int * const p = &val1;//p為常量,不可變,*p可變。 p = &val2;//不可行 *p = 2;//可行
在不熟練之前,我的記憶方法如下,不過可能不適合大家。
由於*p是解引用,即是返回記憶體地址中對應的物件
對於const int *p ,可以將其看做const+ * p, 即限定解引用後的變數為常量。
對於int * const p, 則可以看成(int *) + const p, 即p是型別為int型指標的常量。
對於 const int *p 的情況,指標物件為變數, 指標指向物件為常量的情況,則稱為底層const。
對於 int* const p 的情況, 指標物件為常量,指標指向物件為變數的情況,則稱為頂層const。