徹底搞懂const指針和指向const的指針

徹底搞懂const指針和指向const的指針

我一直覺得迅速掌握一個新的知識點就是拿例子看,那我們直接來咯。

看下面三種情況的例子:

第(1)種情況有以上兩種寫法:

1const 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中間加個”*”肯定是指針本身和它指向的內容都是不能被改變的。

個人小技巧之快速上手知識點

我覺得讀博客和寫博客都是其實是很耗能和耗時間的,所以對於一個有效率的程序員來說,快速用上知識點是很必要的一件事。

針對const的用法,我覺得最最關鍵的記憶點就是看const有沒有緊跟着指針p,如果跟着p就說明這個指針被固定了。剩下的情況基本上都是指針指向的變量被固定,還有一小部分是兩者都被固定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章