const学习总结

来源:互联网 发布:2018年复杂网络大会 编辑:程序博客网 时间:2024/06/13 17:21
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这一个变量中了。





0 0
原创粉丝点击