徹底搞懂const指針和指向const的指針
我一直覺得迅速掌握一個新的知識點就是拿例子看,那我們直接來咯。
看下面三種情況的例子:
第(1)種情況有以上兩種寫法:
(1) const int* p 和 int const * p ;
我們發現:
這兩句代碼有一個共性:不管 int 和 const 誰在前面,“*” 都在 const 的後面。
也就是說這個 p 指針是 一個指向const int類型變量的指針,意思就是變量的值被固定了,不允許被修改。(const int 類型變量就可以理解成const加在了指針p指向的變量上面)
p本身不用初始化,它可以指向任何變量,但它指向的變量裏面的內容是不能被改變的。
總結 :
這個指針 p 可以有無數的選擇權,但是選擇誰,誰就不許改變。
比喻 :
就好比是給你一張票子,你可以買任何一座房子,但是房子裏的裝修不許動。
第(2)種情況有一種寫法:
我們發現:
int *const p = &a;
p是一個指向int的const指針,這次const不是加在了指針指向的變量身上而是加在了指針自己身上,說明指針變量本身的值不允許被改變了。
所以一開始定義p的時候就要給它初始值,也就是說一開始申請內存的時候就要給它賦上一個具體的地址。
但是地址雖然不可以改變,地址裏面的變量值卻可以改變。
總結:
此時這個 p 一開始就被固定選擇了誰,不準再做選擇了,選擇的地址。
比喻 :
你手裏的這張票子相當於是一個房子券,給你券的時候就相當於給你一棟固定的房子,裏面裝修可以隨便改。
第(3)種情況有以上兩種寫法:
const int* const p=一個地址;
int const* const p=一個地址;
第(3)種情況是這個指針本身和它指向的內容都是不能被改變.
快速記憶以上三種區別:
1 指向const的指針(指針指向的內容不能被修改)const關健字總是出現在“ * ”的左邊。
2 而const指針(指針本身不能被修改)const關健字總是出現在“ * ”的右邊。
3 不用說兩個const中間加個”*”肯定是指針本身和它指向的內容都是不能被改變的。