一 概述
二 类型
三 语句
四 函数
五 数据
六 内存
七 代码
附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. 常量
常量值 在运行过程中恒定不变。
常量表达式 在编译期计算,其操作数可以是整数、浮点数、枚举、字符、字符串等字面量,以及强制类型转换、sizeof 运算符和其他常量表达式。
字面量(literal)是源代码中表示固定值的符号,比如
123
、'a'
和"hello"
等。
定义常量:
#define
: 预处理指令。编译预处理阶段文本替换。const
: 关键字。或可做只读变量(read-only)。
#define MIN 0 // 不能以分号结尾。 const int MAX = 100; int main (void) { printf("%d, %d\n", MIN, MAX); return 0; }
注意:const 定义的全局常量是外链接,可被其他模块(源文件)引用(extern)。可改成 static 阻止。
常量值 被编译器直接充作指令操作数,或存储到只读段(.rodata)内。即便栈内分配,编译器也不允许修改。
注意:区分 常量值 和 常量值 指针 。
可利用指针变向修改可读写内存区分配的 “常量”。
int main (void) { const int max = 100; // stack // max = 200; // error: assignment of read-only variable 'max' int *p = &max; // ISO C 禁止,但 GNU 可以。 *p = 200; printf("%d\n", max); return 0; }
const int MAX = 100; // .rodata int main (void) { int *p = &MAX; *p = 200; // Segmentation fault printf("%d\n", MAX); return 0; }
常量名通常建议大写,以区分变量。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论