Appearance
13. 一维数组:批量管理数据的集装箱
前置学习:for 循环
想象一下,如果老师让你写一个程序来记录全班 50 个同学的 C++ 考试成绩,然后算出平均分。 如果你只学过基础变量,你可能会写出这样的代码: int score1, score2, score3 ... score50; 这不仅会让人崩溃,而且根本无法用循环来读取!
为了解决这种“同类型数据大批量堆积”的问题,C++ 发明了数组 (Array)。
1. 什么是数组?
如果你把普通的变量 int a 看作是一个独立的小储物盒,那么数组就是一整排连在一起的储物柜。 它们类型相同、紧密挨着,并且每个柜子都有一个独一无二的编号(下标)。
cpp
// 语法:数据类型 数组名[容量大小];
int scores[50];这行代码告诉电脑:“给我连续分配 50 个装整数的盒子,这排盒子的总名字叫 scores”。
2. ⚡ 核心反直觉设定:下标从 0 开始
在人类的习惯里,数数是从 1 开始的。但在 C++(以及几乎所有现代编程语言)中,数组的编号是从 0 开始的!
对于 int scores[50]; 这个数组来说:
- 第 1 个柜子叫做
scores[0] - 第 2 个柜子叫做
scores[1] - ...
- **最后一个(第 50 个)**柜子叫做
scores[49]
如果你想往第 1 个柜子里放 100 分,取数据或存数据的语法如下:
cpp
scores[0] = 100; // 存入数据
cout << scores[0]; // 取出数据并打印3. 数组的初始化偷懒技巧
在声明数组的同时,我们可以直接给它放初始数据:
cpp
// 按顺序给前三个格子放 10, 20, 30。剩下的 2 个格子电脑会自动帮你填 0
int a[5] = {10, 20, 30};
// OIer 最爱用的清零大招:把所有 100 个格子瞬间全部塞满 0
int b[100] = {0};4. 💀 致命陷阱:越界访问 (Out of Bounds)
这是初学者在学数组时 100% 会犯的错,也是导致 OI 赛场上爆零的头号杀手——RE (Runtime Error 运行错误)。
cpp
int a[5] = {0};
a[5] = 99; // 灾难降临!错在哪里? 数组 a 只有 5 个格子,编号分别是 0, 1, 2, 3, 4。根本不存在 a[5] 这个位置!如果你强行访问 a[5],就相当于砸碎了别人家的柜子,操作系统为了保护安全,会直接强行杀死你的程序!
避坑铁律:永远记住,数组的最大可用下标 = 容量大小 - 1。
5. 动手实践
md
1. 打开左下角的代码沙盒。
2. 声明一个容量为 5 的 `int` 数组,并把里面所有的值都初始化为 0。
3. 把你的出生年份存入数组的第 3 个位置(注意下标应该是多少?)。
4. 使用 `cout` 把数组的第 3 个位置打印出来验证。