数组回顾
约 6 分钟
数组是一排编了号的盒子,一个名字加一个下标就能找到某个盒子。
int a[10]; // 10 个整数盒子:a[0] 到 a[9]
a[0] = 5; // 给第一个盒子放 5
for (int i = 0; i < 10; i++) cin >> a[i]; // 逐个读入
必须记牢的规矩:下标从 0 开始。大小为 的数组,合法下标是 到 ,最后一个元素是 a[n-1],没有 a[n]。所以一个有 10 个元素的数组,合法下标范围是 。
遍历数组的标准循环就是 for (int i = 0; i < n; i++)——用 < 而不是 <=,正好停在 。写成 i <= n 就多访问了一格,越界。
最要命的坑是越界:C++ 不检查下标是否合法,写 a[10]、a[-1] 编译能过、运行时也可能不立刻报错,却悄悄读写了别的内存,导致结果诡异、时对时错,极难排查。
两个实用建议:
- 数组开大一点留余量,比如题目 ,就开
a[1005],避免边界差一格。 - 大数组要开成全局变量(写在函数外),否则放函数里可能撑爆栈空间。
小纸条
一个有 10 个元素的数组,合法下标范围是多少?
登录 后可看答案