指针常量与常量指针

这里不去区分中文到底谁是指针常量与常量指针,因为记住也没啥用。

1. 首先区分读法概念

按照从左至右的顺序记忆,按照从右至左的顺序理解。

参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

记忆
只关注【const】 和 【*】 的先后顺序,从做到右的顺序读就行,const读做常量,*读做指针。

const int * p;//常量指针
int * const p;//指针常量
int const * p;//常量指针

理解

const int * p;  // 指针p 指向一个const
int * const p;  // 指针常量p 指向一个 int
int const * p;  // 指针p指向一个const

2.常量指针

现在声明指向常量的指针ptr
常量指针:指针可以指向别的地址,但是不能通过该指针修改指向的值

int age = 18const int *ptr = &age;

这里的意思是:ptr指向一个const int,也就是说不能通过ptr去修改age这个值,换句话说就是ptr的值是const* 不能修改。

*ptr+=1//是错误的

重点来了:ptr的声明并不意味着他指向的值实际是一个常量值,也就是说age只是一个整型变量而已,可以直接通过 age = 19 来修改age的值。这里只是相对于ptr而言,age是常量,不能通过ptr去修改age的值。

int anotherAge = 30;
*ptr = 20;//错误,不能通过该指针修改其指向的值
age = 20;//正确
ptr = &anotherAge;//正确,可以指向其他的地址

3.指针常量
可以修改指针指向的值,但是禁止改变指向的变量

int sage = 20;
int hapi = 30;
int *const pt = &sage;
*pt = 29;//正确
pt = &hapi;//错误
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值