数组下标为什么从0开始

今天面试一个高级javaer,中途插科打诨问了一个非常简单的问题,数组下标为什么从0开始?

结果这位兄台笑着说这么简单的问题,可就是答不上来,在此做个记录。


目的:数组下标从零开始主要是提高性能,减少CPU计算。


如何读取数组数据的呢?

假设我们去读取array[2]的值,我们如何读取它的值的呢?

  • 首先数据的获取方式:
  1. 先得到一个数据的地址(array)
  2. 然后对其进行偏移(数组的下标)

如果使用指针来表示就是*(array+2),所以array[2]*(array+2)是等价的。看成计算公式可以为:an=a0+n


那么为什么不能从一开始呢?

如果数组从1开始计算,那么获取数组的第一个元素表达方式就是array[1],但是数组的第一个元素的地址就是arrayCPU每次获取元素需要减去1。即必须这样做:*(array + 1 - 1),其中 +1 操作是数组的下标,-1 操作是为了获得正确的元素地址。所以每次获取数组数据时为了获取正确的地址,都需要-1操作,增加了cpu的负担。如果从零开始,就少了 -1 操作,提交了CPU的效率。


暂无评论