1. 程式人生 > 其它 >C++ const與指標,以及頂層const和底層const

C++ const與指標,以及頂層const和底層const

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。