const: 变量
int main()
{
int a=10; //可读可写
int b;
b=a; //a的读取权限>b
a=20; //a的写权限
左值: 放在赋值符号的左边
1.const: 定义常变量,将变量变成只读型的
int ca=10; //可读可写
const int ca=10; //加上const后,变成了只读型
ca=10; //error 不可更改,赋值,所以不可以把10赋给a
const int ba; //error 局部变量默认值随机值
如果是 static int sa=10;
sa=20; //是可以的,因为static:静态,可以更改
2.数据类型对于const而言是透明的
const int *p1=&a;
char const*p1=&a;
int *const p1=&a;
在程序中,数据类型对于const而言是透明的,以上是三个例子中,不管怎么写,整形int型或者字符char型都没有对const造成影响,const修饰的仍然是 p1.
3.const修饰的是它的直接右边 (直接右边不可以做左值)
例如:const int*p1=&a; //p1保存变量a的地址
p1=&b; //ok
*p1=200 //error
因为数据类型视为透明,const的直接右边是 *p1并不是p1; 因为直接右边不可以做左值,所以*p1不可以进行更改赋值为200,但是解引用后,p1却可以保存变量a的值.
4.const 的权限可以同等或者缩小权限传递,但是不可以放大传递
比如你在图书馆借了一本书,此时你拥有了对这本书的只读权限,并不能进行涂画修改,没有可读权限。那么如果你的同学向你借这一本书,你可以借给他,但是告诉他也不能进行涂画修改,所以此时你两的权限一样,同为只读型,便为同等传递权限,但是你自己都不能涂改那么你肯定不能让你同学涂改(不能放大权限传递);如果你有一本书,是你自己买的,你可以随意翻看或者涂改,此时你拥有可读可写权限,那么这时你借给你同学书,你便可以有权限让他只翻看(缩小权限传递)或者可以 又能翻看和涂改(同等传递).
整体举例
int main()
{
int a=10;
int b=20; //可读可写
const int ca=10;
const int ba=20; //只读
int *p=&a;
p=&b; //*p=100;
p=&ca; //error ,*p=100
const int *p1=&a;
p1=&ca;
*p1=100; //error
int *const p2=&a;
int *const p3=&ca; //error constd都直接右边 p3不可以更改,ca也不可以更改,所以此项错误