const:定义常变量,不能写,只读。
const还有下面三点需要注意的地方:
一、数据类型对于const而言是透明的
#include <stdio.h>
int main()
{
const int a = 10;
int const b = 20;
//a = 100;//error
//b = 200;//error
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
上面a和b都不能被重新赋值,但是a和b都可以被读取。
且在定义的时候需要初始化,否则写权限被封锁,此常变量为随机数。
二、const用于封锁直接修饰的内容,将该内容变为只读
具体表现可由下面的源代码演示:
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int *p = &a;
*p = 200;
const int *cp1 = &a;//可理解为封锁了*cp1的写权限
cp1 = &b;//ok
//*cp1 = 200;//error
int const *cp2 = &a;//cp2等价cp1
cp2 = &b;
//*cp2 = 200;//error
int *const cp3 = &a;//可理解为封锁了cp3的写权限
//cp3 = &b;//error
*cp3 = 200;//ok
int const *const ccp = &a;//都被封锁
//ccp = &b;//error
//*ccp = 100;//error
return 0;
}
三、权限只能同等传递或者缩小传递
具体表现可由下面源代码演示:
#include <stdio.h>
int main()
{
int a = 10;//读,写
int b = 20;//读,写
const int ca = 10;//读
const int cb = 20;//读
int *p = &a;//ok
//p = &ca;//error//将权限扩大
const int *cp1 = &a;//const直接修饰*cp1,使其不能作为左值,所以cp不能解引用,但可以改变cp1所指向的地址
cp1 = &b;//权限缩小
cp1 = &ca;//ok
const int *cp2 = &ca;//ok
int *const cp3 = &a;//cp3不能解引用
//int *const cp4 = &ca;//error//ca只能读,如果访问cp4则能赋值,出现错误
const int *const cp5 = &a;//将权限缩小
const int *const cp6 = &ca;//将权限缩小
return 0;
}