天天看點

為什麼數組下标是從0開始?

也不是所有的進階程式語言都是如此,比如Python數組下标就支援負數。

原因一:曆史原因

語言出現順序從早到晚C、Java、JavaScript。

C語言數組下标是從0開始->Java也是->JavaScript也是。

降低額外的學習和了解成本。

原因二:減少CPU指令運算

(1)下标從0開始:

數組尋址——

arr[i] = base_address + i * type_size(1)

其中base_address為數組arr首位址,arr[0]就是偏移量為0的數組,即數組arr首位址;i為偏移量,type_size為數組類型位元組數,比如int為32位,即4個位元組。

(2)下标從1開始:

arr[i] = base_address + (i -1)* type_size(2)

比較兩個計算公式可以發現公式(2)每次CPU尋址需要多一次

i-1

的操作,即多了一次減法的指令運算。

對于數組這種基礎資料結構,無論在哪種進階程式語言中,都是頻繁間接(作為容器的基礎資料結構,比如Java的ArrayList)或者直接被使用的,是以要盡量減少其消耗CPU資源。

原因三:實體記憶體的位址是從0開始的

計算機主存是多個連續位元組大小的單元組成的數組,每個位元組都對應唯一的實體位址,第一個位元組的位址為0。