常量指针与指针常量

常量指针与指针常量是两个很容易被混淆的概念,他们的核心是const关键字,const限定一个变量不允许被改变。const在一定程度上可以提高程序的安全性和可靠性。

一、常量指针

顾名思义,是一个被常量修饰的指针,意味着const去修饰一个*p,所以常量指针的本质是指针,表示这个指针时一个指向常量的指针,因此指针指向的空间中的内容是不能改变的。指针常量通常的书写格式如下:(两种格式等价)

1)const int *p;

2)int const *p;

注:使用常量指针时要注意,指针指向空间的内容不可以通过指针来改变,但是可以使用原来的声明去改变。但是这个指针可以被改变。如下:

const int a = 1;

const int b = 2;

const int *p1 = &a;

p1 = &b; // 虽然指针指向的常量不可以被改变,但是指针本身可以重新指向其他地址。

根据以上特性,指针常量可以不在初始化时赋值。而常量必须在初始化时赋值。

因此常量指针在区分时,*与变量之间是不会存在const的,即*左边永远有const。

二、指针常量

指针常量,指针来形容常量,顾名思义,指针常量本质为常量,说明这个常量的值是一个指针。它的表现形式如下:

int a = 1;

int * const p = &a;

如上所示,p是一个常量,它存放的是&a的值,也就是a的地址,那么由于const p 的特性,所以指针常量中p的值不会改变,因此指向的对象不能更改,但是这个对象是可以被任意修改的

三、指向常量的常量指针

综合以上两个概念,就可以产生一个指向常量的常量指针,表现形式如下:(两种方式等价)

const int a = 1;

const int b = 2;

const int * const p1 = &a;  

int const * const p2 = &b;

如上,一个常量指针被const所修饰,首先说明了p1的值不会被改变,同时,该指针指向的对象也不会改变。因此这是一个从指向空间与空间内的对象都被限制的定义。

 

posted @ 2017-12-09 16:19  CompileLife  阅读(794)  评论(0编辑  收藏  举报