為什麼陣列下標是從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。
相關文章
- 【敏捷0】敏捷專案管理-為什麼從敏捷開始?為什麼從PMI-ACP開始?敏捷專案管理
- 為什麼程式要從0開始計數
- python矩陣下標從幾開始?Python矩陣
- Java斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。Java
- 2022-07-13:給你一個整數陣列 arr ,你一開始在陣列的第一個元素處(下標為 0)。 每一步陣列
- 從0開始開發網頁,需要學什麼?(小白向)網頁
- java稀疏陣列是什麼Java陣列
- 易語言陣列 ,索引從 1 開始。陣列索引
- 從0開始用MavenMaven
- 什麼是開標、評標?
- 為什麼處理排序陣列比未排序陣列快排序陣列
- Java 定義長度為 0 的陣列 / 空陣列Java陣列
- 分支預測:為什麼有序陣列比無序陣列快?陣列
- 什麼是智慧指標?為什麼要用智慧指標?指標
- 從 0 開始學架構架構
- 從 0 開始瞭解 DockerDocker
- 從0開始fastjson漏洞分析ASTJSON
- 0的階乘為什麼是1
- 陣列指標,指標陣列陣列指標
- C語言中陣列溢位是什麼C語言陣列
- 指標陣列與陣列指標指標陣列
- python陣列下標怎麼獲取值並輸出Python陣列
- 從0開始用python寫一個命令列小遊戲(二)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(十)Python命令列遊戲
- 從0開始用python寫一個命令列小遊戲(六)Python命令列遊戲
- [0]為什麼是SpinalHDL-Spinal簡介
- 圖解:什麼是旋轉陣列(Rotate Array)?圖解陣列
- 從0開始學習Webpack(一)Web
- 從0開始fastjson漏洞分析2ASTJSON
- 指標陣列和陣列指標與二維陣列指標陣列
- 兩數之和,返回陣列下標陣列
- 管理:為什麼強調打卡是公司衰敗的開始?
- 從零開始資料分析01--什麼是資料分析
- js 從目標陣列中過濾掉 一個陣列元素,JS陣列
- 從0開始搭建preact開發環境React開發環境
- php陣列中二分查詢是什麼PHP陣列
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 《從0開始學Elasticsearch》—初識ElasticsearchElasticsearch