指向常量的指针与指针常量的区别

指向常量的指针

指针可以指向常量或者非常量,其中指向常量的指针意思是指针所指的对象是一个常量,所以我们不能通过指向常量的指针来改变指针所指的对象的值。如果想要存放常量对象的地址,就只能使用指向常量的指针。
下面是指向常量的指针的定义:

const int a = 520;    //初始化一个整型常量且值为10
const int* p1 = &a;   //指针p1用来指向const int对象也就是整型常量
//也可以写成下面形式
//int const* p1 = &a;

指向常量的指针可以指向非常量对象,但普通指针不能指向常量对象。

int b = 520;   //初始化整型变量b的值为520
p1 = &b;       //让整型常量指针p1指向非常量b,这是合法的
// int* p2 = &a; 这是非法的操作

常量指针

指针和引用不同,指针是一个对象,所以也就允许将指针定义为一个常量。指针常量必须初始化,就像其他常量一样。也就是说,常量指针一旦被初试后,这个指针将一直指向在初始化时被规定的那个对象。指针所存的地址将不会再改变。
下面是常量指针的定义:

int c1 = 10;                //初始化整型变量c1,值为10
const int c2 = 20;          //初始化整型常量c2,值为20
int* const p2 = &c1;        //初始化常量指针p2用来指向int对象c1
const int* const p3 = &c2;  //初始化常量指针p3用来指向const int的对象c2

p2与p3都是常量指针,将不变的保存他们所指向的对象的地址。

指向常量的指针与指针常量的区别

首先我们需要分辨出哪个是指向常量的指针,哪个是指针常量。
我个人使用的方法,是根据星号“ * ”以及const的位置来进行判断。

const int* p = &a;
int const* p = &a;

从等号开始看起,等号左边的p是指针名,再往左看,如果p和星号之间没有别的关键字了,说明这是一个指针p。再看星号左边,星号左边的关键字说明了该指针指向一个什么样的对象。上例说明指针p用来指向const int类型的对象。

const int* const p = &a;
int* const p = &a;

再次从等号向左边看,发现p与星号之间出现了const关键字,这说明指针p是一个常量指针。然后星号左边的关键字表示了该常量指针指向一个什么类型的对象。

指向常量的指针与指针常量的区别在于:
指向常量的指针,该指针本身可能不是一个常量对象,但指向的对象是一个常量,这就说明我们可以让指针现在指向常量a,过一会儿指向常量b但是无法通过该指针来修改它所指向的常量。
常量指针,说明该指针就是一个常量,我们不能改变该指针所指向的是哪个对象。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值