C/C++中指針常量和常量指針的區分

     同學們在寫代碼的時候,有沒有經常遇到以下“安能辨我是雌雄”的令人崩潰的代碼呢?

const int* p;           // 01:指針常量,指向的內容是常量,無法通過指針p修改指向的值
int const* p;           // 02:同上,不同的寫法
int * const p;          // 03:常量指針,該指針是常量,必須初始化,且初始化後不能修改其指向的地址
const int * const p;    // 04:指向常量的常量指針
int const * const p;    // 05:同上,不同的寫法

        我之前也一直分不太清楚這些花裏胡哨的代碼,好在之前很少碰到,湊巧這次項目中引用的庫裏邊用到了指針常量和常量指針,看的有點暈,索性靜下心來,徹底征服這隻"難辨雌雄的兔"。

        廢話說完,我們直接進入主題,以下是乾貨:

         從右往左讀,遇到p就替換成“p is a ”遇到 * 就替換成“pointer to”,其它的保持不變,最後拼出來的句子,只要讀一遍,就其意自現了。

        下面來看示例:

  1. p is a pointer to int const.即【p是一個指向整型常量的指針】。
  2. p is a pointer to const int,即【p是一個指向常量整型的指針】,意思同上,這兩者就是寫法上的區別,作用是一樣的。
  3. p is a const pointer to int,即【p是一個整型的常量指針】,意思已經很明顯了,指針指向的內容是int,指針本身是const。
  4. p is a const pointer to int const,即【p是指向整型常量的常量指針】。
  5. p is a const pointer to const int,即【p是指向整型常量的常量指針】。

     好了,本集武林祕籍就傳授到這裏了,解散!

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