C++中指針常量和常量指針的差別
- 一、指針常量是什麼?
- 二、常量指針是什麼?
- 三、如何記憶和差別它們
-
- 1.字面上差別它們
- 2.代碼上差別它們
- 四 Test Yourself!
指針常量 和 常量指針這兩個詞其實翻譯得不是很合适,是以導緻大家對這兩個概念容易混淆,從英文角度去了解會更容易。
一、指針常量是什麼?
指針常量是由英文
pointer to const
翻譯而來的,看到英文,相信大家不會再搞不清楚它的意義,它代表着一個指向
const
類型變量的指針。
那麼很明顯,指針的指向是可以修改的,因為它隻是個pointer,而指針指向的值是const,是不允許修改的。
二、常量指針是什麼?
常量指針是由英文
const pointer
翻譯而來的,
const
修飾的是
pointer
,說明指針是不可以修改的,因為
pointer
是常量,但指針指向的值是可以修改的。
三、如何記憶和差別它們
1.字面上差別它們
不管是常量指針還是指針常量,轉換成英文都少不了const 和 pointer 兩個單詞。
- 對于指針常量,指針-pointer,常量-const,拼在一起是pointer const,是不是很别扭,但是我們不改變兩個單詞的順序,隻在中間加上一個
,就會變得很自然,pointer to const,它的意義也就顯現出來了。const的是指針指向的值。to
- 對于常量指針,常量-const,指針-pointer,直接拼在一起,就成了const pointer,其意義也就顯而易見了,const的是指針本身。
2.代碼上差別它們
星号*前面的是對被指向對象的修飾,星号*後面的是對指針本身的修飾。
執行個體:
常量指針:
int main()
{
//pointer to const 指針常量
int a = 1;
int b = 2;
int const* p = &a;
//*p = 2; error 指向的是常量,不可修改
p = & b;
}
指針常量:
int main()
{
//const pointer 常量指針
int a = 1;
int b = 2;
int *const p = &a;
*p = 2;
p = & b;//error 指針是一個常量,不可修改指向
}
小技巧:我們可以先把int const p寫下來,再決定星号*加在哪裡
- 如果是pointer to const,就寫作int const* p,因為
,現在我們希望被指向對象是一個const。星号前是對被指向對象的修飾
- 如果是const pointer,就寫作int* const p,因為
,現在我們希望指針是一個const。星号後是對指針的修飾
四 Test Yourself!
下面6道題如果大家能準确說出中文或者英文意義,那麼就算過關啦~~
①const int p;
②const int* p;
③int const* p;
④int * const p;
⑤const int * const p;
⑥int const * const p;
1 整形常量p; const int
2 指向整形常量的指針p; pointer to const int
3 指向整型常量的指針p; pointer to const int
4 指向整形的常量指針p; const pointer to int
5 指向整形常量的常量指針p; const pointer to const int
6 指向整形常量的常量指針p; const pointer to const int
以上就是我個人的一些簡單的了解,希望能幫助到大家,如果有問題或者錯誤,歡迎大家在評論區指出,如果看到一定會回複或者及時改正,謝謝朋友們~
參考連結:如何了解常量指針與指針常量?