為什麼陣列下標是從0開始?

bengxu發表於2018-10-29

也不是所有的高階程式語言都是如此,比如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。


相關文章