很少人知道!很多編程語言中,為什么數(shù)組都從 0 開始編號的?
數(shù)組:為什么很多編程語言中數(shù)組都從0開始編號?

從數(shù)組存儲的內(nèi)存模型上看,"下標(biāo)"最確切的定義應(yīng)該是"偏移"。前面也講到,如果用a來表示數(shù)組的首地址,a[0]就是偏移為0的位置,也就是首地址,a[k]就表示偏移k個type_size的位置,所以計算a[k]的內(nèi)存地址只需要用這個公式:
a[k]_address = base_address + k * type_size
但是,如果數(shù)組從1開始計數(shù),那我們計算數(shù)組元素a[k]的內(nèi)存地址就會變?yōu)?
a[k]_address = base_address + (k-1)*type_size

對比兩個公式,我們不難發(fā)現(xiàn),從1開始編號,每次隨機(jī)訪問數(shù)組元素都多了一次減法運算,對于CPU來說就多了一次減法指令?數(shù)組作為非?;A(chǔ)的數(shù)據(jù)結(jié)構(gòu),通過下標(biāo)隨機(jī)訪問數(shù)組元素又是其非?;A(chǔ)的編程操作,效率的優(yōu)化就要盡可能做到極致。所以為了減少一次減法操作,數(shù)組選擇了從0開始編號,而不是從1開始
不過,我認(rèn)為上面解釋得再多都算不上壓倒性的證明,說數(shù)組起始編號非 0 開始不可。所以我覺得最主要的原因可能是歷史原因。

C 語言設(shè)計者用 0 開始計數(shù)數(shù)組下標(biāo),之后的 Java、JavaScript 等高級語言都效仿了 C 語言,或者說,為了在一定程度上減少 C 語言程序員學(xué)習(xí) Java 的學(xué)習(xí)成本,因此繼續(xù)沿用了從 0 開始計數(shù)的習(xí)慣。實際上,很多語言中數(shù)組也并不是從 0 開始計數(shù)的,比如 Matlab。甚至還有一些語言支持負(fù)數(shù)下標(biāo),比如 Python。

有句話是這么說的:栽一棵樹最好的時間是十年前,其次是現(xiàn)在。對于學(xué)習(xí)編程或者正在工作的朋友,如果你想更好的提升你的編程能力乃至轉(zhuǎn)行,彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學(xué)習(xí)基地
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
