因為可以寫成很多種方式,很容易記錯,這里提供一種高效的方法。
從右邊往左邊讀,遇到
變量名(p)
就替換成變量名 is a(p is a)
,遇到*
就替換成point to
一般會有這幾種寫法:
1. const int p
; 常量整數
2. const int * p
;
p is a point to int const
.
p
是一個指向整型常量的指針。
3. int const * p
;
p is a point to const int
.
p
是一個指向常量整型的指針。和2一樣。
4.int * const p
;
p is a const point to int
.
p
是一個常量指針,指向整型。
5.const int * const p
;
p is a const point to int const
.
p
是一個常量指針,指向整型常量。
6.int const * const p
;
p is a const point to const int
.
p
是一個常量指針,指向常量整型。和5一樣
常量指針:具有只能夠讀取內存中數據,卻不能夠修改內存中數據的屬性的指針,稱為指向常量的指針,簡稱常量指針。
聲明:const int * p; int const * p;
ps:可以將一個常量的地址賦值給一個對應類型的常量指針,因為常量指針不能夠通過指針修改內粗數據。只能防止通過指針引用修改內存中的數據,并不保護指針所指向的對象。
指針常量:是指指針所指向的位置不能改變,即指針本身是一個常量,但是指針所指向的內容可以改變。
聲明:int * const p=&a;
ps:指針常量必須在聲明的同時對其初始化,不允許先聲明一個指針常量隨后再對其賦值,這和聲明一般的常量是一樣的。
其實常量指針,指針常量,也是從右邊往左邊讀。
數組名類似是指針常量,但是不是指針常量。
int a[4];
在sizeof(a);
和 &a
,都不是指針常量的結果。結果分別是 16
, 和a的地址而不是指向a的指針的地址
。