2013-05-09 26 views
1

什麼是提到數組[0]首先得到arrarys中的值。 爲什麼我們不使用arrary [1]來獲得第一個值。 如果我們使用arrary [1]意味着程序員容易,但爲什麼我們使用array [0]提到array [0]獲得第一個值的原因是什麼?

+0

這裏是你的答案:http://en.wikipedia.org/wiki/Zero-based_numbering#Advantages – DhruvPathak 2013-05-09 05:46:14

+0

數組索引從0開始,因此訪問需要使用索引的第N個元素N-1 – verisimilitude 2013-05-09 05:46:24

+0

http ://programmers.stackexchange.com/questions/110804/why-are-zero-based-arrays-the-norm – 2013-05-09 05:47:25

回答

2

使用0作爲第一個數組索引的約定可以追溯到C.在C中,數組作爲一個概念非常緊密地耦合到底層的內存模型 - 數組實際上是一系列內存中的值,從分配的地址開始。爲了從這個數組中獲得一個地址,你可以將它的值作爲一個指針,增加一個指針值並查看那個地方的內存。在取消引用前給這個'指針'加0就給了你數組中的第一項 - 所以自然先使用0,否則每次分配一個數組時你必須在每次訪問之前減1 2)每次分配浪費整個項目空間。它還具有第三個優點 - 如果數組中有256個條目,則可以用一個字節(僅保存0到255)對其進行索引,但如果數組從1開始,則256不是一個字節的有效值,所以你不得不使用一個簡短的。

繼承C語言的語法,如Java和C#和Javascript,因此C的思維模型也使用0索引數組 - 出於同樣的原因 - 一致性是一個強大的功能。

一些語言,比如Lua,其目標是「直觀易懂」,並且從1開始,相反。

+0

如果你不動態創建指針,你不必做任何一個。在編譯時'a'的值可以是'&a [-1]'。但是當你解除引用指針時,你只需要增加。 – Elazar 2013-05-09 05:53:40

0

用什麼編程語言?有編程語言,其中數組索引爲1.有編程語言,其中數組從0索引。有編程語言,其中數組是從任何用戶定義的值進行索引的。

在較低級別的語言中,您可能會在起始索引處看到0,原因很簡單,因爲在硬件級別,數組的第一個元素位於內存中整個數組開頭的字節偏移量0處。這爲計算各種陣列元素的字節偏移提供了一個非常簡單而有效的公式。例如。對於數組的第i個元素,字節偏移量爲i * element_size。這種簡單的計算(例如乘以編譯時常量)可以通過給定硬件上的單個機器指令來實現,這使得陣列訪問特別有效。

相關問題