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-


分享到:


相關文章: