左值:放在赋值符号"="的左边.即写权限
1、限定写权限,将变量变成只读
const int a=10; int const a=10;两个定义方法都可以均表示a是一个常变量不可修改。
2、基本数据类型对于const透明
(int const *p=&a)==(const int *p=&a)
3、const修饰它的直接右边,使其只读
const int *p=&a;
const 直接修饰的*p,*p不可修改,但是p可以修改。
int *const p=&a;
const直接修饰的p,所以p不可以修改,*p可以修改。
4、权限可以同等或者缩小传递,但不能放大传递
int a = 10;
int b = 20;//a,b可读可写
const int ca = 30;//可读
int *p1 = &a;//*p可读可写,a也可读可写,所以这种操作可以(同等操作)
const int *p2 = &a;//*p2可读,a可读可写,所以这种也可以(缩小操作)
int *p3 = &ca;//这种操作错误,因为ca只可以读,而*p3可读可写,要是这种操作可以,那么*p3可以修改ca,而ca 常变量,所以不可以。(放大操作)
******************
const必须要初始化
***********************************************************************************************************************************************
C++:
(第三句代码是进行强转,汇编时期,翻译指令,不与编译时期冲突,a此时没有const,属性可以进行修改)
C:
为什么相同的代码在C++和C中的结果不一样呢???
在C中const代表这个变量不能修改,在编译时期只是检查而已。
在C++中const在编译时期就进行替换,类似于宏替换,将所有的变量都替换成数字,这是跟C中的不同点。
但是其实变量的值还是变了的
当我调试到这个位置时,a的值已经改变,但是由于在编译期就给我们替换成了10,所以输出来就是10了。