别再“随手存数据”了:变量和常量,编程的“收纳哲学”
你有没有遇到过这种情况?收拾房间时,把一堆东西随手扔进抽屉,然后关上——等到下次想找的时候,翻个底朝天也找不到。编程新手最容易犯的错,就是在内存里“随手存数据”。今天用数字10,明天用字符串“hello”,后天又换了个布尔值,程序跑着跑着就崩了,自己还一脸懵。
其实,编程里的存储逻辑,和整理房间一模一样。你需要给每样东西找个固定的“盒子”,再贴上清晰的标签。而变量和常量,就是这两种盒子——一个能随时换内容,一个锁死了永远不变。理解了它们,你才算真正拿到了操作数据的钥匙。
变量:带标签的可折叠储物盒
想象一下,你有一个储物盒,盒子上贴着标签“age”。你往里面放了个数字10。过一会儿,你又打开盒子,把10换成11。盒子的内容可以随意改动,这就是变量。在C++里,你得先“声明”这个盒子——告诉电脑盒子叫什么、能装什么类型的东西:
int age = 10; // 声明并初始化
age = 11; // 赋值,修改内容
第一行是“声明并初始化”,第二行是“赋值”。如果你只声明不初始化,就像放了个空盒子进去,里面可能残留着以前别人留下的垃圾数据。这在C++里很危险,所以最好养成“声明时顺手初始化”的习惯。
数据类型决定了盒子能装什么
你不能往“int”盒子里塞一段文字,就像不能用装书的盒子去装水。表1列了常用的几种:
| 类型 | 能装什么 | 场景例子 |
|---|---|---|
int | 整数(无小数) | 年龄、班级人数、金币数 |
float | 小数 | 身高1.65米、考试成绩92.5 |
char | 单个字符(单引号) | 性别'M'、等级'A' |
bool | 逻辑值(true/false) | 今天是否下雨 |
命名规则:别给盒子起怪名字
- 只能使用字母、数字和下划线,不能以数字开头。
- 不能和C++关键字重名(比如
int、return)。 - 区分大小写,
age和Age是两个不同的盒子。
这个规则特别容易踩坑。比如我常见新手写 int 2num = 10;——显然不行。还有新手把变量名写成 int,直接冲突。记住一条金律:见名知意,用 studentCount 而不是 s,半年后你自己看代码也能秒懂。
常量:锁死的铁箱子
常量就像一个带锁的铁箱子。你把东西放进去,箱子自动锁上,再也打不开。C++用 const 关键字声明:
const int DAYS_IN_WEEK = 7; // 一周七天,永远不会变
// DAYS_IN_WEEK = 8; // 报错,常量不能修改
常量的好处很多。最直观的是防止手滑——比如圆周率π,写成变量的话,万一不小心改成3,整个物理计算就废了。另外,维护更方便:如果你在程序里几十处写了3.14159,某天需要更高精度,就得改几十个地方;如果定义一个const float PI = 3.14159;,只改一行就够了。
生活中哪些是常量?一年12个月,一小时60分钟,你的生日(年月日不变)。它们不应该被随意修改。
关联题目:看看你是不是真懂了
在C++中,以下哪条语句正确地声明了一个整型变量并初始化为10?
这道题其实在考察变量声明的语法。正确写法是 int num = 10; 或 int num(10);。错误选项可能包括:只声明不初始化(int num;)、用赋值语句代替声明(num = 10; 但没声明)、关键字拼错等。
解题思路:先看有没有指定数据类型(int),再看有没有变量名,最后看等号右边的初始值是否为整数。注意 int num = 10; 是最标准的形式。另外,常量声明要用 const int NUM = 10;,但题目问的是变量,所以不能选带 const 的。
在C++中,使用const关键字定义的常量在程序运行过程中可以被修改。
这道题考的是常量的本质——一旦定义,绝不能修改。如果你试着给常量赋值,编译器会报错:“expression must be a modifiable lvalue”。所以这句话是错误的。
实战一下:真的用起来
来看一个真实的小程序。计算圆的面积和周长,你就能体会到变量和常量的协同:
const float PI = 3.14159; // 常量,圆周率不变
float radius = 5.0; // 变量,半径可以改
float area = PI * radius * radius; // 计算面积
如果你尝试 PI = 3.14;,编译器直接报错。而 radius 可以随意改成10.0、3.0,甚至让用户输入。这就是变量和常量的分工:常量保护不该变的值,变量承载动态数据。
新手最常犯的4个错(我见的太多)
- 忘记声明直接使用:
age = 10;→ 必须先int age;。 - 给常量赋值:
DAYS = 8;→ 常量不允许。 - 大小写搞错:
myAge和myage是两个名字 → 编译器不会帮你匹配。 - 未初始化就读取:
int number; cout << number;→ 可能输出一个随机的垃圾值。
最后这个尤其坑。C++不会自动清零局部变量,你拿到的可能是内存里残留的乱码。所以声明即初始化永远是良习惯。
接下来还能学什么?
变量和常量的基础打牢后,你可以往前走:
- 输入输出:用
cin让程序交互,比如用户输入半径。 - 运算符:加减乘除、求余,让变量动起来。
- 条件判断:
if语句,比如判断金币是否够买装备。 - 数据类型进阶:
double(更高精度小数)、string(字符串)。
记住一句话:变量是程序的“活水”,常量是程序的“锚点”。没有变量,程序就是一潭死水;没有常量,程序就像风中浮萍,随时可能被人手滑改崩。
关于作者
我是赵老师,持有 NOI 信息学奥赛教练证书,拥有 15 年以上的软件开发经验,从事信息学少儿编程教学已有 8 年时间。
这些年累计帮助 多名 学生通过编程特长升入自己心仪的目标学校。
如果你在编程学习上有任何疑问,欢迎联系我:18620372957(微信同号)