const学习总结

const这个东东学习了很多次,每次学完过了一段时间就忘了,下次还是搞错。这次自己总结下,顺便印证下那句只有把自己学到的东西写成教程才是真正学习到的名言


先看只有一个变量的场景
原则:
1. const永远只修饰它右边的那个变量,基础类型的位置与const的位置可以互换,更精简的一句话:const与基础类型之间没有*号时,const与基础类型之间的位置可以互换。
例:
int const i;        //i不能变
const int i;        //i不能变
这两条语句是等价的。
int const *p1;
const int *p1;
这两条语句也是等价的。


2. 如果语句中有表示指针的*号,那么请记住所有的指针*号都是从右向左结合的
例:
int const *p1;        //*p1不能变,即p1所指向的值不能变,因为*号修饰的只有p1
int* const p1;        //p1不能变,即p1不能指向其它地方了,因为*号修饰的是const p1
一句话来总结就是如果const在*号的左边,指针指向的值不能变,如果const在*号的右边,则是指针不能执行其它地方了。一句话:左定值,右定向


再来看有多个变量的场景
原则:
1. const的作用范围与类型的作用范围是相同的
例1:
int const a = 0, b = 0;
const int a = 0, b = 0;
这两条语句是等价的,都是表示a、b的值均不能修改
int a = 0;
const int  *p1 = &a, *p2 = &a;
int const *p1 = &a, *p2 = &a;
上面两条语句也是等价的,都是*p1、*p2不能改变


例2:
int * const p1 = &a, *p2 = &a;
这条语句中,p1是不能改变指向的,但是p2可以。因为这个const与int之间有*号,所以他们的位置不能互换,*号是从右向左结合的,所以 (*const p1)是一个整体,这就把上面这条语句的const作用范围限定在p1这一个变量中了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值