Skip to content

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 个位置打印出来验证。
💻 运行代码

C++ 在线评测沙盒

📥 标准输入 (cin):
📤 终端输出 (cout):