在提到数组[0]以获得arrarys
中的值时,有什么共鸣。
为什么我们不使用arrary [1]来获得第一个值。
如果我们使用arrary [1]意味着容易编程,但为什么我们使用array [0]
答案 0 :(得分:2)
使用0作为第一个数组索引的约定可以追溯到C.在C中,作为概念的数组与底层内存模型紧密耦合 - 数组实际上是内存中的一系列值,从地址开始它被分配到了。要从此数组中获取地址,您可以将其值作为指针,递增指针值并查看该位置的内存中的内容。在解除引用之前将0添加到此'指针'会给出数组中的第一项 - 所以首先使用0是很自然的,否则每次分配数组时,你要么1)在每次访问之前必须减1或者2)每次分配浪费一个整个项目空间。它还有第三个优点 - 如果你的数组中有256个条目,你可以用一个字节(只保存0到255)来索引它,但如果数组从1开始,256不是一个字节的有效值,所以你必须使用短片。
继承语法的Java和C#以及Javascript等语言,因此C的思维模型也使用0索引数组,原因相同 - 一致性是一个强大的东西。
有些语言,例如Lua,其目标是“直观易懂”,从1开始,相反。
答案 1 :(得分:0)
用什么编程语言?存在编程语言,其中数组从1开始索引。存在编程语言,其中数组从0开始索引。存在编程语言,其中数组从任何用户定义的值索引。
在低级语言中,您可能会在起始索引处看到0
,因为在硬件级别,数组的第一个元素位于整个开头的字节偏移0
内存中的数组。这允许用于计算各种数组元素的字节偏移的非常简单和有效的公式。例如。对于数组的第i个元素,字节偏移量为i * element_size
。这种简单的计算(例如乘以编译时常量)可以通过给定硬件上的单个机器指令来实现,这使得数组访问特别有效。