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