C语言学习笔记一(常量)

一、常量的分类

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取消定义。


二、常量的应用场景

  1. 避免魔法数字:用常量代替代码中的直接数值,提高可读性。

    #define MAX_STUDENTS 50
    const int BUFFER_SIZE = 1024;
  2. 配置参数:定义程序中固定不变的参数。

    const float GRAVITY = 9.8f;
    #define TIMEOUT 30
  3. 接口约束:限制函数参数范围。

    enum ErrorCode { SUCCESS = 0, ERROR_INVALID_INPUT, ERROR_FILE_NOT_FOUND };

三、注意事项

  1. const#define的区别:

    • const有类型检查,#define是文本替换。

    • const占用内存,#define不占用。

    • const支持作用域规则,#define全局有效。

  2. 字符串常量的拼接

    char* str = "Hello" " World!"; // 等效于"Hello World!"
  3. 枚举的底层类型

    • C语言中枚举常量本质是整型,C11标准允许指定枚举的底层类型(如enum Week : char)。

  4. 指针与常量

    • 常量指针: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和枚举以提高代码健壮性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值