数组回顾

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 个元素的数组,合法下标范围是多少?

登录 后可看答案

数组回顾 · 考级冲刺 · op599 课程