一、常量的分类
1. 字面常量(Literal Constants)
直接写在代码中的固定值,没有标识符名称。
1.1 整型常量
-
表示方式:
-
十进制:
123,-45 -
八进制(以
0开头):0123(十进制83) -
十六进制(以
0x或0X开头):0x1A(十进制26)
-
-
后缀:
-
L或l:表示长整型(如123L) -
LL或ll:表示长长整型(如123LL) -
U或u:表示无符号整型(如123U)
-
1.2 浮点型常量
-
表示方式:
-
小数形式:
3.14,-0.5 -
指数形式(科学计数法):
1.23e5(即1.23×10⁵)
-
-
后缀:
-
F或f:单精度浮点(如3.14F) -
默认无后缀为
double类型(如3.14)
-
1.3 字符常量
-
单引号括起来的单个字符:
'A','5','#' -
转义字符:
-
\n(换行)、\t(制表符)、\\(反斜杠)、\'(单引号)、\"(双引号) -
ASCII码值:
\x41(十六进制,表示'A')、\101(八进制,表示'A')
-
1.4 字符串常量
-
双引号括起来的字符序列:
"Hello, World!" -
存储方式:以
\0(空字符)结尾的字符数组。
2. const修饰的常量
-
通过
const关键字定义,具有类型和内存地址。 -
语法:
const int MAX = 100;
-
const float PI = 3.14f;
-
特点:
-
不可修改(编译时报错)。
-
作用域取决于定义位置(全局或局部)。
-
实际存储于内存中,可通过指针强制修改(不推荐)。
-
3. 枚举常量(Enum)
-
通过
enum定义一组整型常量。 -
语法:
enum Week { Mon, Tue, Wed, Thu = 5, Fri }; // Mon=0, Tue=1, Wed=2, Thu=5, Fri=6 -
特点:
-
默认从0开始递增,可显式赋值。
-
枚举值是整型常量,可直接用于比较和运算。
-
4. 宏常量(#define)
-
通过预处理器指令
#define定义。 -
语法:
#define MAX 100 #define PI 3.14159 #define MSG "Hello" -
特点:
-
预处理阶段直接替换文本,不占用内存。
-
无类型检查,可能导致意外错误。
-
作用域从定义处到文件结束,可用
#undef取消定义。
-
二、常量的应用场景
-
避免魔法数字:用常量代替代码中的直接数值,提高可读性。
#define MAX_STUDENTS 50 const int BUFFER_SIZE = 1024; -
配置参数:定义程序中固定不变的参数。
const float GRAVITY = 9.8f; #define TIMEOUT 30 -
接口约束:限制函数参数范围。
enum ErrorCode { SUCCESS = 0, ERROR_INVALID_INPUT, ERROR_FILE_NOT_FOUND };
三、注意事项
-
const与#define的区别:-
const有类型检查,#define是文本替换。 -
const占用内存,#define不占用。 -
const支持作用域规则,#define全局有效。
-
-
字符串常量的拼接:
char* str = "Hello" " World!"; // 等效于"Hello World!" -
枚举的底层类型:
-
C语言中枚举常量本质是整型,C11标准允许指定枚举的底层类型(如
enum Week : char)。
-
-
指针与常量:
-
常量指针:
const int* p(指向内容不可变) -
指针常量:
int* const p(指针本身不可变)
-
四、代码示例
#include <stdio.h>
#define PI 3.14159
const int MAX = 100;
enum Color { RED, GREEN, BLUE };
int main() {
const float gravity = 9.8f;
printf("PI = %f\n", PI); // 输出宏常量
printf("MAX = %d\n", MAX); // 输出const常量
printf("Gravity = %.1f\n", gravity);
printf("RED = %d\n", RED); // 输出枚举常量
return 0;
}
五、总结
| 常量类型 | 优点 | 缺点 |
|---|---|---|
| 字面常量 | 直接使用,无需定义 | 可读性差,难维护 |
const常量 | 类型安全,支持作用域 | 占用内存 |
| 枚举常量 | 提高代码可读性 | 仅支持整型值 |
| 宏常量(#define) | 不占内存,灵活 | 无类型检查,调试困难 |
根据需求选择合适的常量类型,建议优先使用const和枚举以提高代码健壮性。
6210

被折叠的 条评论
为什么被折叠?



