C语言之常量

常量

常量,常量表达式和const关键字修饰的只读变量都存储在.rodata只读数据段中

1.字面值常量 literal

  • 整形字面值 1230xff00ff
  • 字符常量,类型总是 int, 'a', '\n'
  • 宽字符常量 L'x', L'中文'
  • 枚举 enum WEEK {A=2, B, C}, 实际上是整型
  • 浮点 3.14 缺省为double类型
  • 指针常量 pointer constant, 较少用到,不可改指向
  • 字符串常量 string literal “hello”
    • 存储在字符数组中的,以NULL字节结尾的0个或多个的字符

    • 在表达式中的值是字符串的地址而不是字符本身,因此可以赋值给字符指针

    • 不能赋值给字符数组(仅仅支持初始化的特殊形式)

      char *p = "hello"; // 字符指针指向字符串常量
      char a[] = "hello"; // 字符数组初始化
      // 等价于
      char a[] = {'h', 'e', 'l', 'l', 'o', '\0'}

2.命名常量 Named constant

初始化:

  • 声明显示初始化
  • 作为函数形参隐式初始化

3.辨析

常量定义:const关键字 VS define宏定义

  • 变量和简单的字符串替换
  • constant并不能算是真正意义的常量,只是不可修改的变量,验证思路?

常量和指针

  • 常量指针 int const *p = &a; // 指向常量的指针,const修饰(*p), 改向不改值
  • 指针常量 int * const p = &a; // 指针类型的常量,const修饰p, 改值不改向

4.参考资料

  • 《C和指针》
    • 3.1 基本数据类型
    • 3.4 常量
  • 《嵌入式C语言的自我修养》
    • 7.7 常量和变量
  • 《C程序设计语言》
    • 2.3 常量
posted @   libq8  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示