问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【轻松学C:编程小白的大冒险】--- 07 常量的定义、声明与应用场景

创作时间:
作者:
@小白创作中心

【轻松学C:编程小白的大冒险】--- 07 常量的定义、声明与应用场景

引用
CSDN
1.
https://blog.csdn.net/weixin_44205779/article/details/146100783

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

【轻松学C:编程小白的大冒险】--- 07 常量的定义、声明与应用场景

今日冒险目标:驯服常量大魔王

欢迎回到C语言魔法学校!今天我们要收服编程世界里最固执的伙伴——常量。它像被封印的魔法水晶,一旦设定就永远不变!准备好学习如何用常量打造坚不可摧的代码了吗?

一、常量:被封印的魔法水晶

想象你有一个黄金宝箱

  • 一旦放入钻石,就永远无法取出或更换(const常量)
  • 用魔法契约提前规定好内容(#define宏常量)
  • 只能读取,不能修改(永恒不变的规则)

定义常量

const int MAX_SCORE = 100;   // 用const封印的整数常量
#define PI 3.1415926535       // 用#define契约规定的浮点数

二、封印魔法:常量的内存秘密

当你写下const int a = 5;时,编译器会:

  1. 在内存中分配4字节空间(同int变量)
  2. 贴上"只读"封条(禁止修改)
  3. 存进去数字5

内存示意图

内存地址   | 内容  | 标签        | 权限
0x2000    | 05    | MAX_SCORE   | 只读
0x2004    | 0A    | age(变量) | 读写

冷知识

  • const常量在编译时检查修改行为(会报错)
  • #define宏在预处理阶段直接替换(无类型检查)

三、常量的魔法应用

1. 数学公式

#define GRAVITY 9.8    // 重力加速度
float distance = 0.5 * GRAVITY * time * time;

2. 安全防线

const int LOGIN_ATTEMPTS = 3;  // 最大登录次数
for (int i = 0; i < LOGIN_ATTEMPTS; i++) {
    // 登录逻辑
}

3. 配置文件

#define SERVER_URL "http://api.example.com"
// 网络请求使用固定URL

四、封印方式大比拼

类型
语法
作用时机
特性
const
const int a = 5;
编译阶段
有类型检查,内存中有存储
#define
#define A 5
预处理阶段
无类型检查,直接文本替换

🌰 举个栗子

const float PI = 3.14f;   // 正确,类型匹配
#define PI 3.14f          // 正确,但可能被重新定义

五、常量的生存法则

1. 生命周期

  • 与变量相同:全局常量程序启动时存在,局部常量函数运行时存在

2. 作用域

  • const常量:与变量作用域一致(文件、函数、代码块)
  • #define宏:从定义处到文件结束(可用#undef提前解除)

六、小课堂

  • 专业术语

  • 常量表达式:编译时能计算出结果的表达式(如1+2

  • 类型安全const#define更安全,防止类型不匹配错误

  • 编程冷笑话
    Q:为什么#define宏不能当const用?
    A:因为它是个"文字游戏玩家",而const是"内存管家"。

七、今日金句

变量像河流可以流动,常量像山脉永远矗立,两者结合才能写出刚柔并济的代码!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号