const和一级指针的结合有两种情况

C++语言规范:const修饰的是离它最近的类型

1、const修饰*p

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

 离const最近的类型是int,所以const修饰的是*p,现在*p是一个常量,所以 *p=20 是不能编译通过的,也就是指针的指向是不能被改变的,而指针本身是可以被改变的,也就是说p=&b是可以编译通过的,因为p本身并没有被const修饰而不能作为左值。

结论:const修饰*p,指针本身可以指向不同的int类型的内存,但是不能通过指针简介修改指向的内存的值。且const int *p = &a;和int const* p =&a;表示意思是一样的。

2、const修饰p

int *const p = &a;

 

离const最近的类型是int *  ,所以const修饰的是p指针本身,所以p=&b是不可以的,但是*p=20是可以的。

结论:这个指针p现在是常量,不能在指向其他内存,但是可以通过指针解引用修改执行的内存的值也就是*p是可以被修改的,p不能被修改。

3、const修饰p和*p

const int *const p = &a;

前一个const修饰了*p且不能被修改,后一个const修饰了p也不能被修改。

结论:指针本身以及指针所指向的内存都不可以被修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值