
一起动脑筋 · 先看一个小故事
女孩站在第一块地砖上,机器人问:“你离起点跨过了几块砖?”答案是 0,不是 1。
把过程摊开来看
- 第 1 个偏移 0
- 第 2 个偏移 1
- 第 3 个偏移 2
C++ 数组下标表示相对首元素的位置,第一项的偏移是 0。
“第三个”是在数数量,“下标 2”是在说从起点走几步。分开这两种问法,就容易理解。
01第一个元素为什么不是 a[1]?
int a[4] = {10, 20, 30, 40};
010120230340
第一个元素是 a[0],最后一个是 a[3]。
02下标更像“偏移量”
可以把下标理解成:从第一个元素开始,向后偏移几个元素。
a[0]
偏移 0 个 → 还是第一个。
a[1]
偏移 1 个 → 第二个。
a[2]
偏移 2 个 → 第三个。
a[3]
偏移 3 个 → 第四个。
03它和地址有什么关系?
数组元素连续存储,因此概念上:
a[i] 的位置 = 第一个元素的位置 + i 个元素
所以第一个元素自然就是偏移 0 个位置。
04a[i] 和指针有什么关系?
在 C++ 中,对普通数组来说,表达式:
a[i]
和:
*(a + i)
在相应语境下表示同一个元素。
05长度为 n 的数组,合法下标是什么?
如果数组长度是 n,合法下标是:
0 到 n - 1
例如长度 5:
0, 1, 2, 3, 4
06为什么最容易写错最后一个位置?
因为人习惯“第 1 个、第 2 个……第 n 个”,而数组使用“偏移 0、1……n-1”。
你已经知道了什么
- 数组第一个元素的下标是 0。
- 下标可以理解成从首元素开始的偏移量。
- 连续存储让“首地址 + 偏移”成为自然的定位方式。
- 长度为 n 的数组,合法下标范围是 0 到 n-1。
- 最后一个元素不是 a[n],而是 a[n-1]。
下一篇:怎样遍历一个数组?
轮到你来试一试
长度为 8 的数组,最后一个有效下标是多少?
想好了吗?点开看解释
7。有效下标满足 0 ≤ 下标 < 8,共八个,而不是最大下标也写 8。