之前剛入行時,沒有學習好計算機知識,雖然有疑惑但是沒有深究,最近在補習基礎知識。對於"為什么數組的下標要從零開始?",覺得自己可以解答了。數組下標從零開始主要是提高性能,減少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
的效率。