第 4 课:变量、常量与标识符
本课学习目标: 1. 理解变量、常量、标识符、关键字的含义。 2. 掌握 C++ 变量名的合法命名规则(区分大小写、不能以数字开头、不能是关键字)。 3. 理解变量的先定义、再初始化、后赋值流程。 4. 彻底厘清
=(赋值符号)的执行逻辑(先算右边,再给左边)。 5. 认识整型、字符型、字符串等不同常量的写法区别。
一、 什么是变量?
程序要处理各种数据,就必须把数据存起来。变量就是程序中用来保存数据的“小盒子”(或者说是一个带名字的内存空间)。
int a = 10;
- 这行代码定义了一个整型变量
a,并让它保存了整数10。 - 变量的核心特点:在程序运行过程中,变量的值是可以改变的。
cpp int a = 10; // a 变成 10 a = 20; // a 的值被修改为 20 cout << a; // 最终输出 20
⚠️ 核心铁律:C++ 中,变量必须先定义,再使用。 * 正确:
int a; a = 10;* 错误:a = 10;(直接使用未定义的a会导致编译错误)。
二、 变量名(标识符)的合法规则
在 C++ 中,给变量、函数起的名字统称为标识符。考试中必考“下列哪个变量名合法”。
⚖️ 合法标识符的四大铁律:
- 只能由字母、数字、下划线(
_)组成。 - 不能以数字开头(如
123abc是非法的)。 - 不能是 C++ 的关键字(如
int、for、while不能拿来当变量名)。 - 严格区分大小写(
first和First是两个完全不同的变量)。
| 变量名 | 是否合法 | 错误原因 / 说明 |
|---|---|---|
int x1; |
合法 | 字母和数字组成,数字没在开头。 |
int _name; |
合法 | 下划线可以开头。 |
int red_star; |
合法 | 包含下划线和字母。 |
int 1abc; |
❌ 非法 | 不能以数字开头。 |
int red star; |
❌ 非法 | 不能包含空格。 |
int red-star; |
❌ 非法 | 不能包含减号(C++会误认为是减法)。 |
int for; |
❌ 非法 | for 是系统关键字。 |
三、 定义、初始化与赋值
- 定义:告诉编译器我要用这个名字(如
int x;)。 - 初始化:定义变量时顺便给个初始值(如
int x = 5;)。 - 赋值:变量定义后,用
=修改它的值(如x = 8;)。
📌 深入理解赋值符号 =
在数学中 = 表示相等,但在 C++ 中,= 是赋值运算符。
* 执行顺序:先计算右边的值,再把结果保存到左边的变量中。
cpp
int a = 3;
a = a + 2; // 先算右边:a原来的值3加2等于5,再把5存回左边的a中
* 方向性:赋值语句左右不能颠倒。
cpp
int a = 5;
5 = a; // ❌ 错误!赋值号左边必须是能存值的变量,不能是常数或表达式。
📌 连续赋值
C++ 支持连续赋值,其结合方向是从右向左:
int a, b;
b = a = 4;
- 执行过程:先让
a = 4,再把这个结果赋给b。最终a和b都是4。
四、 变量交换(经典代码片段)
考试中经常考“如何交换两个变量 a 和 b 的值”。
❌ 错误的交换方式:
int a = 10, b = 20;
a = b; // 此时 a 变成了 20,但 a 原来的 10 丢了!
b = a; // 此时 b 赋的也是 20,根本没完成交换。
✔️ 正确的方式 1:使用临时变量(推荐)
int a = 10, b = 20;
int temp; // 声明一个临时小盒子
temp = a; // 1. 把 a 的值(10)暂存到 temp
a = b; // 2. 把 b 的值(20)赋给 a
b = temp; // 3. 把 temp 存的旧 a(10)赋给 b
// 成功完成交换:a=20, b=10
五、 常量与数据类型辨析
- 常量:在程序中直接写出来的、运行中不可改变的固定值。
10(整数常量)3.14(小数常量)'3'(字符常量,必须用单引号)"3"(字符串常量,必须用双引号)
💡 核心陷阱辨析: *
'3'是字符,在内存中存的是它的 ASCII 码。 *"3"是字符串。 *3是整型数字。 它们的内存占用和底层含义完全不同!
六、 GESP 一级真题与例题精讲
练一练 1:合法变量名的识别
【题目】
下列哪个可以作为 C++ 变量名?( )
A. Var-1
B. $1
C. %%1
D. _Var_1
正确答案:D 名师解析: *
Var-1包含了减号-,非法。 *$1包含了特殊符号$,非法。 *%%1包含了%,非法。 *_Var_1由下划线、大小写字母和数字组成,且没有以数字开头,完全合法。
练一练 2:关键字与常用名字
【题目】
下面说法正确的是( )。
A. for 不能作为变量名,因为它是 C++ 关键字
B. _tnt 不能作为变量名,因为变量名必须以英文字母开头
C. _tnt_ 不能作为变量名,因为最后一个字符容易与减号混淆
D. printf 是 C++ 关键字,所以不能作为变量名
正确答案:A 名师解析: *
for是循环关键字,绝对不能当变量名,A 正确。 * 变量名可以以下划线开头,所以_tnt合法,B 错误。 * 下划线在末尾完全合规,不会和减号混淆,C 错误。 *printf不是关键字(它是个标准库函数名),但实际写代码时不建议拿来当变量名,D 说它是关键字是错的。
练一练 3:连续赋值逻辑
【题目】 下面代码执行后的输出是( )。
int a, b;
a = 3;
b = a = 4;
printf("%d %d", a, b);
A. 4 4
B. 3 3
C. 3 4
D. 4 3
正确答案:A 名师解析: *
a = 3;让a变成了3。 *b = a = 4;是连续赋值,先执行a = 4(a被改成了4),再把4赋给b(b也变成了4)。 * 所以最终a和b都是4,输出4 4。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com