const
限制对目标数据的修改。被const修饰的量称为常量,不能被修改。因为在使用中不能再次赋值,故在修饰普通变量时,会被强制要求初始化
void main() {
const static int a; // 静态变量自动赋值初值0,正确
cosnt int b; // 常量未被初始化,错误
a++; // 错误
a = 2; // 错误
}
常量指针:指向常量的指针,如const int *p
。通过该指针访问的目标单元,只能读不能写,但是并未改变目标单元的读写特性——当不通过指针访问时,仍可直接读写目标单元,只是限制了通过指针修改变量。
void main() {
int a, b;
cosnt int *p; // 正确,因p本身不是常量,可以不初始化
p = &a; // 正确,因p本身不是常量
*p = 40; // 错误,*p指向的是常量,限制通过指针改变目标单元
a = 30; // 正确,目标单元的读写特性不会发生改变
const int c = 2;
int *p = &a; // 错误,类型不匹配,应为const int *
p = &c; // 正确
}
指针常量:指针本身为常量,如int * const p
。该指针的指向必须被初始化,且一旦初始化后,指针的指向就不能再发生改变,但通过指针访问的目标单元可以进行读写。
void main() {
int a = 10, b = 5;
int * const p = &a; // 指针常量,必须被初始化
*p = 12; // 正确,通过指针访问的目标单元,其读写特性不变
p = &b; // 错误,指针的指向不能被改变
return 0;}