Const的用法
const有四个作用,下面我们分别介绍:
作用1:定义常变量 (常变量的值不会被改变) const int a = 10; 在这样的定义中a 只能可读,不可写也就是说它的值是不能被改变的,可读就是它只能做右值不能做左值,右值就是指在赋值符号‘=’的右边,顾名思义左值就是在‘=’的左边了,接下来由具体的实例来说明:
int main( )
{
int a = 10; // 可读可写
int b = a; // a做了右值
a = 100; //a做了左值,即a的值被重新写了一遍
const int ca = 100; // 只读不可写,只能做右值不能做左值,所以ca = 100 是错误的;
b = ca; // 正确,ca做了右值
}
作用2:数据类型对于const是透明的,const int 等同于 int const
实例 : int const cc = 100; //其实这一句就等同于 const int cc = 100;
作用3:const 直接修饰的内容不能做左值
实例:const int *cp1 = &a; 或 int const *cp1 = &a;
cp1 = &b; //正确,(其实是因为cp1存了a的地址,如果cp1= =&a就是错误的,但是 = &b就是对的,因为cp1此时没有存b的地址)因为const直接修饰的是*cp1, 所以*cp1不能做左值,但是cp1可以做左值; cp1 = 20 //错误
int *const cp3 = &a;
cp3 = &b // 错误,因为const 直接修饰了cp3;
*cp3 = 100; //正确,理由同上;
作用4:权限的传递(上课老师讲的图书管的例子)
{
int a = 10; // 可读可写
int b = 10; // 可读可写
int const ca = 100; // 只可读
int const cb = 200; //只可读
int *p = &a; // 可读可写
p = &ca; //错误,因为p是指针,他会解引用
int const *cp1 = &a ;
cp1 = &ca; //正确
int *const cp2 = &a;
cp2 = &a; //错误
int *const cp3 = &ca; //错误
const char *p ; // p是指针,可以解引用,所以如果它保存了某个变量的地址是,p是不可以做左值的
}
char *Mystrcpy ( char *des, const char *src)
{
// *src = ‘\0’; //在这个语句中,因形参那里的src已经被const修饰,所以数组src的值是不能被改变的,数组src只能做右值,不能做左值;
}