Appearance
C++ 基础:变量与数据类型
在编写复杂的程序时,我们需要让计算机在内存中临时记住各种数据(比如玩家的血量、当前的得分)。在编程语言中,用来在内存中保存数据的“带标签的储物盒”,就叫做变量 (Variable)。
1. 认识最常用的变量:int
要想使用变量,必须先向电脑申请造一个“盒子”。我们在做题时最常打交道的就是专门用来装整数的盒子——int。
cpp
// 语法:盒子类型 盒子名字 = 初始装的东西;
int hp = 100;这短短的一行代码,包含了变量的三个核心要素:
- 类型 (
int):规定了这个盒子只能装普通的整数(Integer)。 - 名字 (
hp):这个盒子的专属标签,以后我们要找这 100 滴血,直接喊hp就行。 - 值 (
100):盒子里实际装的具体数据。
2. 疑问:如果给 int 强行塞入别的东西会怎样?
既然 int 是专门用来装整数的,那如果我们“不听话”,非要把小数或者其他极端数据塞进去,会发生什么呢?
情况 A:塞入小数
cpp
int score = 3.14;
cout << score;运行结果只会输出 3。 因为 int 盒子极其死板,它装不下小数部分,会直接把 .14 无情地砍掉丢弃(注意:是直接截断,不是四舍五入)。
情况 B:塞入一个极其巨大的数字
cpp
int money = 3000000000; // 30 亿
cout << money;运行结果会输出一个乱七八糟的负数(比如 -1294967296)。 因为普通的 int 盒子容量有限,极限只能装到大约 21 亿。强行塞入 30 亿会导致盒子被“撑爆”,在计算机里这叫数据溢出,是非常严重的程序错误。
为了解决这些问题,C++ 不仅仅只有 int,它还为不同形态的数据准备了不同类型的盒子。
3. 核心数据类型(竞赛必背)
在 GESP 考级和信奥赛中,除了 int,你还必须牢记以下 4 种核心变量类型:
| 类型声明 | 专门用来装什么 | 示例 | 竞赛必考重点 |
|---|---|---|---|
int | 标准整数 | 10, -5 | 最常用,极限容量大约是 21亿。 |
long long | 巨大整数 | 10000000000 | 极易错: 当题目数据范围超过 20 亿时,必须使用它,防止盒子撑爆(数据溢出)! |
double | 小数(双精度) | 3.14159 | 竞赛中涉及小数的运算,首选 double,不要用 float(精度不够容易错)。 |
char | 单个字符 | 'A', '*' | 必须使用单引号包裹,里面只能放一个字符。 |
bool | 真 或 假 | true, false | 只有两个值:成立(true) 或 不成立(false),常用于状态标记。 |
4. 给变量起名字的 4 条死规矩
给盒子贴标签(命名)不能随心所欲,必须通过 C++ 编译器的严格审查:
- 只能由英文字母、数字和下划线 (
_) 组成。 - 绝对不能以数字开头(
1a会报错,a1是合法的)。 - 不能用系统自带的专属词汇(比如不能给变量起名叫
int或cout)。 - 严格区分大小写(
Score和score在内存里是两个毫不相干的盒子)。
5. 危险区:未初始化的“幽灵数据”
如果你只申请了盒子,却没有往里面放东西(没有赋初始值):
cpp
#include <iostream>
using namespace std;
int main() {
int score; // 危险!申请了空间,但没有清空里面的旧数据
cout << score << endl;
return 0;
}这个时候输出 score,结果并不是 0,而是内存里上个程序遗留下来的“垃圾乱码”(比如 -858993460)。 避坑铁律: 养成好习惯,每次声明变量时顺手赋一个初始值,例如 int score = 0;。
6. 动手实践
md
1. 在网页左下角的在线沙盒中,声明一个 `int` 类型的变量 `a` 并赋值为 15。
2. 声明一个 `int` 类型的变量 `b` 并赋值为 4。
3. 利用 `cout`,打印出 `a / b` 的结果,看看 C++ 中的整数相除是怎么回事。
4. 把变量 `a` 和 `b` 的类型从 `int` 改为 `double`,再运行一次,对比结果有什么不同?