為什麼陣列下標是從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。
相關文章
- Python之父:為什麼Python陣列下標從0開始Python陣列
- Python語言的創始人解釋為什麼Python陣列的索引從0開始Python陣列索引
- Python 語言的創始人解釋為什麼 Python 陣列的索引從0開始Python陣列索引
- 【敏捷0】敏捷專案管理-為什麼從敏捷開始?為什麼從PMI-ACP開始?敏捷專案管理
- 為什麼程式要從0開始計數
- python矩陣下標從幾開始?Python矩陣
- 從0開始開發網頁,需要學什麼?(小白向)網頁
- java稀疏陣列是什麼Java陣列
- Java斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。Java
- 易語言陣列 ,索引從 1 開始。陣列索引
- 2022-07-13:給你一個整數陣列 arr ,你一開始在陣列的第一個元素處(下標為 0)。 每一步陣列
- 什麼是智慧指標?為什麼要用智慧指標?指標
- 為什麼處理排序陣列比未排序陣列快排序陣列
- 為什麼處理有序陣列比無序陣列快?陣列
- 分支預測:為什麼有序陣列比無序陣列快?陣列
- C語言中陣列溢位是什麼C語言陣列
- Java 定義長度為 0 的陣列 / 空陣列Java陣列
- 從 0 開始瞭解 DockerDocker
- 從 0 開始學架構架構
- 從零開始資料分析01--什麼是資料分析
- 陣列指標,指標陣列陣列指標
- 陣列指標 指標陣列陣列指標
- 圖解:什麼是旋轉陣列(Rotate Array)?圖解陣列
- 為什麼資料資產管理首先從頂層設計開始
- 為什麼遊戲與列車是天作之合?遊戲
- 指標陣列與陣列指標指標陣列
- 陣列指標和指標陣列陣列指標
- 為什麼說列舉更佔記憶體,列舉原理是什麼?記憶體
- 從0開始學習Webpack(一)Web
- 從0開始fastjson漏洞分析ASTJSON
- 熱點聚焦:為什麼流程管理都要從流程梳理開始?薦
- php陣列中二分查詢是什麼PHP陣列
- 是什麼讓我開始了元件化?元件化
- 從0開始用python寫一個命令列小遊戲(十)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(二)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(六)Python命令列遊戲
- 兩數之和,返回陣列下標陣列
- 指標陣列和陣列指標與二維陣列指標陣列