同學們在寫代碼的時候,有沒有經常遇到以下“安能辨我是雌雄”的令人崩潰的代碼呢?
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”,其它的保持不變,最後拼出來的句子,只要讀一遍,就其意自現了。
下面來看示例:
- p is a pointer to int const.即【p是一個指向整型常量的指針】。
- p is a pointer to const int,即【p是一個指向常量整型的指針】,意思同上,這兩者就是寫法上的區別,作用是一樣的。
- p is a const pointer to int,即【p是一個整型的常量指針】,意思已經很明顯了,指針指向的內容是int,指針本身是const。
- p is a const pointer to int const,即【p是指向整型常量的常量指針】。
- p is a const pointer to const int,即【p是指向整型常量的常量指針】。
好了,本集武林祕籍就傳授到這裏了,解散!