火龙信奥
  • 分享
  • 课程
  • 题库
  • CSES HARD
    • GESP
    • CSP
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • e课堂
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

第 4 课《变量、常量与标识符》

作者: 作者的头像   huolong , 时间:2026-09-07 13:55:25 , 所有人可见, 阅读  2

第 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++ 中,给变量、函数起的名字统称为标识符。考试中必考“下列哪个变量名合法”。

⚖️ 合法标识符的四大铁律:

  1. 只能由字母、数字、下划线(_)组成。
  2. 不能以数字开头(如 123abc 是非法的)。
  3. 不能是 C++ 的关键字(如 int、for、while 不能拿来当变量名)。
  4. 严格区分大小写(first 和 First 是两个完全不同的变量)。
变量名 是否合法 错误原因 / 说明
int x1; 合法 字母和数字组成,数字没在开头。
int _name; 合法 下划线可以开头。
int red_star; 合法 包含下划线和字母。
int 1abc; ❌ 非法 不能以数字开头。
int red star; ❌ 非法 不能包含空格。
int red-star; ❌ 非法 不能包含减号(C++会误认为是减法)。
int for; ❌ 非法 for 是系统关键字。

三、 定义、初始化与赋值

  1. 定义:告诉编译器我要用这个名字(如 int x;)。
  2. 初始化:定义变量时顺便给个初始值(如 int x = 5;)。
  3. 赋值:变量定义后,用 = 修改它的值(如 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

关于火龙

  • 关于我们
  • 学员获奖
  • 预约试听
  • ACM课程
  • CSP课程
  • 学习指南

帮助中心

  • 用户协议
  • 打字练习 HOT
  • 在线画图
  • DevC++下载
  • CSP报名
  • GESP官网

推荐课程

  • C++零基础入门(可试看)
  • C++进阶提升
  • GESP考级辅导
  • GESP打卡
  • CSP-J/S打卡

公众号

火龙信奥公众号二维码

© 2017-2026 义乌市睿码科技有限公司版权所有 浙ICP备2021013995号

火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码