跳到主要内容

C 语言常量

回首往事,const 关键字原先如果命名为 readonly 就好多了。 —— 《C 专家编程》

const 关键字 vs. define 宏

  • const 声明的全局变量、static 变量都在程序的只读段 .rodata
  • const 局部变量存在于栈内存,如果获得内存地址,实际可以修改内容
  • #define 定义的变量,会在预处理时替换,不会在程序中存在

常量指针 vs. 指针常量

  • 常量指针,例如 const int *p,指向 const int 的一个指针,指针地址可以改变,但是地址上的内容不允许改变
  • 指针常量,例如 int *const p,指向 int 的一个指针常量,指针地址不允许改变,但是地址上的内容允许改变
  • 当然也有常量指针常量
  • 实际开发中,前者用得多,主要时保护传入函数的结构体只读不被修改
  • 比较容易混淆,我自己的记忆方法时把 const 翻译成常量,然后把 * 翻译成指针然后连起来读,从字面意思去区分