通常使用 const 修饰符来定义常量。
常量:共享一块内存空间,即使多处使用,根据 const 修饰的位置来确定是否能修改。在编译阶段会执行类型检查。
常量的四种写法:
static const 数据类型 * 常量名 = 值; // 局部常量:用 static 修饰后,不能提供外界访问
const 数据类型 * 常量名 = 值; // 全局常量:不论定义在哪个文件夹中,外部都能访问
数据类型 const * 常量名 = 值;
数据类型 * const 常量名 = 值;
const 修饰位置不同的区别?
实例:
const int *p = NULL;
int const *p = NULL;
int* const p = NULL;
解析:
*p 不能被修改,p 能被修改;
int a = 10;
p = &a; // 正确
*p = 10; // 报错
*p 不能被修改,p 能被修改;
int b = 20;
p = &b; // 正确
*p = 20; // 报错
*p 能被修改,p 不能被修改;
int a = 10;
p = &a; // 报错
*p = 10; // 正确
注意:
1 和 2 其实没什么区别。
oc 中字符串的值是在常量区,3 中两种都报错。
结论:
const 右边的总不能被修改。