Const(定义常变量)的四个重要性质

1.将变量变成只读

定义一个变量a,并赋初值10,变量a既可以被重新赋值,又可以被读取:

int a= 10;
a = 20;
int b = a;

这时变量a被称为左值,它具有可以被赋值和读取两种属性

倘若定义常变量a,试着重新赋值和读取:

可以看到编译器报错,const将变量a变成了右值,即只可被读取,不能写入(重新赋值)


2. 数据类型对于const而言是透明的

观察1,const写在int后面,那么数据类型是否会影响const的作用?:

显而易见,数据类型不会影响const


3. const修饰它的直接右边,不能做左值

int a = 10;
int b = 20;
const int * p= &a;
p = &b;        //指针变量p做左值,被重新赋值为b的地址,说明const并没有对指针p作用
*p = 30;       //由于数据类型对于const是透明的,所以const作用于*p,可以看到*p不能做左值,因为它不能被重新赋值
	
int * pp = &a;
*pp = *p;       //可以看到被const修饰的变量,不能再做左值,只能用来被读取


4.权限可以同等或者缩小传递,但不能放大传递

const int b = 20;
const int *p = &b;         //同等传递:此时b不能做左值,*p也不能做左值,倘若int * const p,则是错误的,因为*p是可以做左值的,这样的话b的值可以被修改,因此不合法
const int * const p = &b;  //缩小传递:p和*p都不能做左值,这样就保证了b的值不会被修改
int * const p = &b;        //放大传递:这种传递是不合法的,因为const修饰指针变量p,但是*p可以做左值,可以修改b的值

阅读更多
上一篇字符串常量高频错误
下一篇strlen.strcpy.strcmp.stratoi.stritoa的自己实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭