我們知道const關鍵字是用來修飾變量的,它修飾的變量在程序運行的過程中不能發生改變,即不能進行二次賦值。那么當出現以下情況:
1、const int *p;
2、int const *p;
3、int * const p;
在這三句話中,總共有兩個變量,分別是指針指向的整型數據和指針。如果修飾的是整型數據,那么*p即指針指向對象的內容不能發生改變;如果是指針的話,那么p即指針指向的對象不能發生改變。讓人不禁流汗,const關鍵字,你還知道你在和誰貼貼嘛。
接下來,便讓福爾摩斯.小李,為你揭曉“渣男”,const關鍵字的真正(修飾)對象。
一、種子選手1號:const int *p;
3.jpg (24.63 KB, 下載次數: 48)
下載附件
2022-8-23 09:20 上傳
經過一番試探,可以很明顯的看到,在這種情況下,它修飾的是指針指向的整型數據,而不是指針。因為指針改變指向沒有報錯,反而當我改變指向對象的內容的時候,系統表示*p只處于只讀狀態,即const關鍵字當前修飾的是整型數據(指向對象的內容)。
二、種子選手二號:int const *p
4.jpg (22.09 KB, 下載次數: 55)
下載附件
2022-8-23 09:20 上傳
通過編譯可以看到,它和const int *p修飾的對象是一樣的,也是整型數據,即指向對象的內容不能發生改變。
三、種子選手三號:int * const p;
5.jpg (22.26 KB, 下載次數: 54)
下載附件
2022-8-23 09:21 上傳
通過編譯我們可以看到,此時const修飾的變量是指針,指針在運行的過程中指向的對象不能發生改變。
總結一下,const關鍵字只有在和指針貼貼的最近的時候,修飾的對象才是指針,在其余情況下修飾的都是指針指向的內容。
|