常量的概念以及用法

常量的概念以及用法 1. 字面常量 (Literal Constants)直接在代码中写出的具体数值或字符没有名字。整型常量10, -5, 0xFF (十六进制), 012 (八进制)浮点常量3.14, 1.2e-5字符常量A, n, \n (转义字符)字符串常量Hello World2.使用 #define 宏定义 (预处理常量)这是 C 语言中最传统的定义常量的方法。它在预处理阶段进行简单的文本替换不分配内存没有类型检查3.使用 const 关键字 (常变量)语法const 数据类型 常量名 值;特点必须以分号;结尾。有类型安全Type Safety。可以进行调试因为它是符号表的一部分。可以限定指针指向的内容不可变。const 与指针的结合难点const 放在 * 的不同位置含义不同const int *p 或 int const *p 含义指针指向的内容是常量不能通过指针修改值但指针本身可以指向别处。 口诀“const 在 * 左边内容不可改”。int * const p 含义指针本身是常量不能改变指针的指向但可以通过指针修改它指向的值。 口诀“const 在 * 右边指针不可改”。const int * const p 含义两者都不可改声明读法修改*p(值)修改p(地址)记忆技巧int *p普通指针✅✅随便改const int *p常量指针❌✅左边管值int * const p指针常量✅❌右边管指向const int * const p指向常量的常量指针❌❌锁死4.枚举enum如果需要定义一组相关的整数常量使用 enum 更清晰#includestdio.h int main() { enum Color{ red 1, green 6, blue }; printf(red%d\n,red); printf(green%d\n,green); printf(blue%d\n,blue); return 0; }5.#define 与 const 的区别总结特性#define(宏)const(关键字)处理阶段预处理阶段编译前编译阶段类型检查无纯文本替换易出错有类型安全内存占用不分配内存直接替换代码通常分配内存存储在数据段调试支持不支持调试器看不到宏名支持调试器可以看到变量名地址操作不能取地址 ()可以取地址 ()推荐程度旧式写法用于复杂的宏逻辑现代 C 语言推荐写法预处理器宏与变量的区别#define 是一个预处理器指令用于在编译前将某些文本替换为指定的值。它没有类型信息是简单的文本替换。#define 声明的常量不会占用内存它只是在预处理阶段做替换。const 是C语言中的一个类型修饰符用来声明常量它会为常量分配内存并指定类型。常量的值在程序运行期间不可修改。类型安全#define 没有类型信息编译器无法检查类型。因此它在某些情况下可能导致类型不匹配的问题。const 声明的常量具有类型可以利用编译器的类型检查来避免错误。作用域#define 声明的常量是全局的通常在整个文件中有效甚至跨函数调用除非使用#undef来取消定义。const 声明的常量遵循变量的作用域规则可以限制常量的作用范围。#define 更适用于简单的常量替换、条件编译和宏函数它不具备类型检查灵活性高但容易引发错误。const 更适用于需要类型安全、具有作用域限制的常量声明特别是在涉及到变量和复杂数据类型时。