为什么数组下标从0开始?
目录
先说答案吧:
- 历史问题,C语言数组下标使用0,于是之后的语言都使用0
- 数组的偏移运算规则
历史问题这个不用多说了,下面说一下第二条原因
我们知道数组因为内存都是连续存放的,每个元素的大小都是固定的,所以支持随机访问,我们只需要根据偏移和元素大小来计算出地址即可实现随机任意的访问数组中的元素,所以随机访问效率为 O(1)
数组查找一个元素的效率为O(n)
,如果是有序数组查找一个元素使用二分的话那就是O(logn)
a[i]的地址 = a + i * size
我们看到,如果是第一个元素,那么i=0
,如果是第二个元素那么i=1
,这就是为什么数组下标从0
开始的原因
但是如果硬要从1
开始的话,那么上述的公式就会变成如下:
a[i]的地址 = a + (i-1) * size
这样就会多一次i-1
的减法操作,产生不必要的消耗,因为数组可能会进行一个频繁的随机查找