为什么数组的下标要从零开始?

之前刚入行时,没有学习好计算机知识,虽然有疑惑但是没有深究,最近在补习基础知识。对于"为什么数组的下标要从零开始?",觉得自己可以解答了。数组下标从零开始主要是提高性能,减少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的效率。

posted @ 2019-03-04 20:42  retnil  阅读(2939)  评论(0)    收藏  举报