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; }