常量的分类
字面常量和符号常量
1. 字面常量
直接写在代码里的数值,无需定义,直接使用.例:100、3.14、“a”、“hello”等
字面常量分为4种:整型、浮点型、字符型、字符串常量
整型常量
C语言支持三中进制的整型常量(C语言不支持2进制)
进制 | 书写规则 | 实例 |
|---|---|---|
十进制 | 正常数字 | 1,2,3,5,9 |
八进制 | 以0开头 | 012 |
十六进制 | 以0x开头 | 0x1A |
2字符常量
用 单引号 '' 包裹,只能存放1个字符
示例:'A'、'9'、'#'
特殊:转义字符常量
转义字符 | 作用 |
|---|---|
| 换行 |
| 制表符(空格缩进) |
| 输出反斜杠 |
| 输出单引号 |
| 输出双引号 |
字符串常量
用 双引号 "" 包裹,可以存放多个字符
示例:"Hello C"、"12345"、"学习常量"
2.符号常量
符号常量是通过符号名定义的常量。符号常量可以用#define预处理指令或者const关键字定义。
预处理阶段直接纯文本替换,无类型检查
如图预处理的时候已经将文本替换了。
定义在函数外部,全局生效
不能被修改、不能赋值
常量名建议 全大写,区分变量
2. const 修饰常量(只读变量)
有数据类型,编译器会做类型检查,更安全
可以定义在局部/全局
必须初始化赋值,后续不可修改
特点:const常量有类型限制,编译器会进行类型检查。const常量存储在内存中,可以参与程序运行时的计算。
#define VS const 核心区别(高频考点)
对比维度
#define 宏常量
const 常量
类型检查
无,纯文本替换
有,类型严格检查
作用域
全局(默认整个文件)
随定义位置(局部/全局)
内存占用
不占用内存,直接替换
占用内存,属于只读变量
可否修改
完全不可修改
只读,不可修改
推荐场景
全局固定参数(PI、最大值)
需要类型安全、局部常量