爲何數組下標老是從 0 開始呢?

原文地址: 爲何數組下老是從 0 開始呢?數組

image

這個問題有沒有想過?會不會認爲爲什麼設計的如此反人類呢? spa

有兩種比較好的說法,咱們瞭解下:設計

說法一

表示範圍的最佳形式,好比表示天然數序列 2,3,···,12,有四種方法:code

a. 2 ≤ i < 13 ,或者記做 [2, 13)blog

b. 1 < i ≤ 12 ,或者記做 (1, 12]rem

c. 2 ≤ i ≤ 12 ,或者記做 [2, 12]get

d. 1 < i < 13 ,或者記做 (1, 13)it

a 方法是最好的,有以下緣由:class

  1. 範圍的上限減去下限等於範圍內元素的個數

好比方法 a 中,13 - 2 = 11,而範圍內恰好就有 11 個元素,方法也有一樣的性質,但方法 c 和 d 就沒有。方法

  1. 連續的範圍沒有重疊

兩個連續的範圍咱們但願能夠寫成 「0 到 5」 和「5 到 9」這樣的形式。若是使用方法 c,12 就同時包含在 [2, 12] 和 [12, 24] 這兩個範圍裏;相似的,使用方法 d,13 既不包含在 (2, 13) 裏也不在 (13, 25) 裏。用方法 a,b 就沒有這樣的問題。好比 [2, 13) 和 [13, 25) 是兩個連續的範圍,13 只會包含在後一個裏。

方法 a 比方法 b 好的理由:咱們經常會用到有下限無上限的集合,最典型的是天然數集合。好比要表示天然數集合內的範圍 「0 到 10」, 用方法 a 能夠寫成 [0, 11) , 用方法 2 能夠寫成 (-1, 10] 。方法 b 的問題是形式中出現了 - 1 這個非天然數, 用非天然數來表示一個天然數集合內的範圍顯然不是一個好的選擇。

說法二

咱們常說的數組下標最精確的意思是」偏移量 「,a[0] 的偏移量是 0,即爲首地址。a[i]的偏移量是 i,尋址公式:

a[i]地址 = 首地址 + i * 數據大小

若是下標從 1 開始,那對應的尋址公式

a[i]地址 = 首地址 + (i-1) * 數據大小

image

對 CPU 來講,每次隨機訪問,就多了一次減法運算,多發一條指令,因此從 0 開始能夠減小 CPU 的計算。

想了解不少,請關注下面:
image

相關文章
相關標籤/搜索