之前刚入行时,没有学习好计算机知识,虽然有疑惑但是没有深究,最近在补习基础知识。对于"为什么数组的下标要从零开始?",觉得自己可以解答了。数组下标从零开始主要是提高性能,减少CPU
计算。
如何读取数组数据的呢?
假设我们去读取array[2]
的值,我们如何读取它的值的呢?
- 首先数据的获取方式:
- 先得到一个数据的地址(
array
) - 然后对其进行偏移(
数组的下标
)
如果使用指针来表示就是*(array+2)
,所以array[2]
和*(array+2)
是等价的。看成计算公式可以为:an=a0+n
那么为什么不能从一开始呢?
如果数组从1开始计算,那么获取数组的第一个元素表达方式就是array[1]
,但是数组的第一个元素的地址就是array
,CPU
每次获取元素需要减去1。即必须这样做:*(array + 1 - 1)
,其中 +1 操作是数组的下标,-1 操作是为了获得正确的元素地址。所以每次获取数组数据时为了获取正确的地址,都需要-1操作,增加了cpu
的负担。如果从零开始,就少了 -1 操作,提交了CPU
的效率。