const:定义常变量,不能写,只能读,即只能做为左值
const的三个规则:
(1)数据类型对于const是透明的
例:
int a = 10;
//int b;
a = 20;//左值,放在赋值符号的左边,写权限
int b = a;//c99
const int ca = 100;//只读
//ca = 200;//error,ca只读,不能写
//ca = 100;//error
//const int cb;//error
int const cb = 100;
数据类型对于const是透明的,int const cb = 100等价于const int cb =100
(2)const用于封锁直接修饰的内容,将该内容变为只读
例:
int *p = &a;
p = &b;
*p = 200;
const int *cp1 = &a;
cp1 = &b;//ok
//*cp1 = 200;//error
int const *cp2 = &a;//cp2等价cp1
cp2 = &b;
//*cp2 = 200;//error
int *const cp3 = &a;
//cp3 = &b;//error
*cp3 = 200;//ok
int const *const ccp = &a;
//ccp = &b;//error
//*ccp = 100;//error
(3)权限只能同等传递或缩小传递
例:
int a = 10;//读,写
int b = 20;//读,写
const int ca = 10;//读
const int cb = 20;//读
int *p = &a;//ok
//p = &ca;
//error 若可以的话,则通过*p=40就能把ca的值改变,由于ca是只读的不能被改变,所以p=&ca;//error
const int *cp1 = &a;
cp1 = &b;
cp1 = &ca;//ok
const int *cp2 = &ca;//ok *cp2被const直接修饰不可能做左值,所以不会通过它修改ca的值
int *const cp3 = &a;
//int *const cp4 = &ca;//error *cp4未被const直接修饰,可以做左值,有可能通过它修改ca的值
另外,附加一小段代码,用一句实现字符串拷贝
#include "stdio.h"
char *Mystrcpy(char *des,const char *src)
{
char *p=des;//p保存des的首地址
while(*des++=*src++);
return p;
}
int main()
{
char a[10]="ac";
char b[]="abc";
printf("%s\n",Mystrcpy(a,b));
return 0;
}