c++中的常量指针和指针常量

c++中的常量指针和指针常量,二者的主要区别在于:
常量指针,指针的指向可以修改,但指针指向的值不可更改;
指针常量,指针的指向不可更改,但指针指向的值可以修改。

初学者非常容易混淆,这里总结下两个小技巧方便记忆和理解:
1、二者的代码形式为:

int const *p; const int *p;//常量指针的两种形式
int* const p; //指针常量

为了方便名称的识别和记忆,我们可以暂且把const读作“常量”,把取值符*读作“指针”,二者的区别就看const和*出现的先后顺序,int const *p或const int *p都可以读作常量指针,而int* const p读作指针常量;

2、看const修饰的是谁,简单来说就是从右往左看const离谁更近,*的意义就在于取得指针p所指向的那块内存存储的值,所以把*理解为指针指向的值;而p的意义在于其指向的那块内存地址,所以把p理解为地址指向,这样一来就很清楚了,常量指针const离*更近,因而值固定,指向可变;而指针常量const离p更近,因而指向固定,值可变。

int const *p; const int *p;//常量指针,const修饰指针
int* const p;//指针常量,const修饰常量
int* const* p;//const既修饰*指针又修饰常量,指针指向与值皆不可更改

//代码示例
int a = 0;
int b = 0;
//------------------------------------------------
int const *p1 = &a;//常量指针p1指向存储变量a的那块内存
//*p1 = 1;//错误,指针指向的那块内存的值为const,不可更改
p1 = &b;//正确,指针的指向可以修改,此时更改为指向存储变量b的那块内存

//-------------------------------------------------
int* const p2 = &a;//指针常量p2指向存储变量a的那块内存
*p2 = 1;//正确,指针指向那块内存的值可修改
//p2 = &b;//错误,指针p2是const的,指向的内存地址不可更改

//------------------------------------------------
int* const* p3 = &a;
//*p3 = 1;//错误,指针指向的值不可修改
//p3 = &b;//错误,指针的指向不可修改

总结:
区别常量指针和指针常量,关键看const和*的前后顺序,

  1. const在前*在后,const修饰指针,为常量指针,指针指向可以修改,但指向的值不可修改;
  2. *在前const在后,则const修饰常量,指针的指向不可更改,但其指向的值可以修改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值