C++|指針與const:常量指針與指針常量(都是指針)

在編程語言中,上下文(context)是一個很重要的概念。一個關鍵字在不同的上下文有不同的含義或作用,同時,順序不同,表達的概念可能也不一樣,如常量指針與指針常量的概念。都是指針,或者是指針指向的數據不能用指針更新,或者是指針本身不能再更新。

1 常量指針

表示是一個指針,用指針不能修改或更新指向的數據。

	int i =16;
int j = 12;
const int* pi = &i;
//int const* pi = &i;
//*pi = 22; //l-value specifies const object
pi = &j; //允許,指針不是常量,可以更新
i = i+20; //允許,只是不能用指針常量去修改,可以直接通過變量右值來更新左值
cout< cout<

指針常量是指你不能使用指針去修改其指向的對象,如*pi = 22;這樣做是不允許的。但你可以直接使用變量去更新其值,如上面的i=20;

另外,int const* pi與const int* pi沒有區別。

2 指針常量

是一個常量,也是一個指針,是一個不能被更新的指針,初始化後不能再被修改或更新。

int i =16;
int j = 12;
int *const pi = &i;
*pi = 22;

//pi = &j; //l-value specifies const object
i = i+20;
cout<cout<

3 總結一下

const在*之前是常量指針,表示不能修改其指向的值。

const讀作常量,*讀作指針,按照順序讀作常量指針。

const double * ptr;

double const * ptr;

(以上兩種定義相同)

const在*之後是指針常量,表示指針本身不能被修改。

const讀作常量,*讀作指針,按照順序* const讀作指針常量。

double * const ptr;

從前面往後面看,const與類型在一起,則指向的類型數據不能用指針去修改,如果是與標籤標識符在一起,表示指針本身不能被更新。

4 同時使用兩個const

如:

int ivar = 10;

const int * const pvar = &ivar;

表示ivar不能通過pvar去修改,pvar本身也不能有不同的指向。

-End-


分享到:


相關文章: