C 语言常量
回首往事,
const关键字原先如果命名为readonly就好多了。 —— 《C 专家编程》
const 关键字 vs. define 宏
- const 声明的全局变量、static 变量都在程序的只读段 .rodata
- const 局部变量存在于栈内存,如果获得内存地址,实际可以修改内容
- #define 定义的变量,会在预处理时替换,不会在程序中存在
常量指针 vs. 指针常量
- 常量指针,例如
const int *p,指向const int的一个指针,指针地址可以改变,但是地址上的内容不允许改变 - 指针常量,例如
int *const p,指向int的一个指针常量,指针地址不允许改变,但是地址上的内容允许改变 - 当然也有常量指针常量
- 实际开发中,前者用得多,主要时保护传入函数的结构体只读不被修改
- 比较 容易混淆,我自己的记忆方法时把
const翻译成常量,然后把*翻译成指针然后连起来读,从字面意思去区分