提到array [0]获得第一个值的原因是什么?

时间:2013-05-09 05:44:17

标签: arrays

在提到数组[0]以获得arrarys中的值时,有什么共鸣。 为什么我们不使用arrary [1]来获得第一个值。 如果我们使用arrary [1]意味着容易编程,但为什么我们使用array [0]

2 个答案:

答案 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。这种简单的计算(例如乘以编译时常量)可以通过给定硬件上的单个机器指令来实现,这使得数组访问特别有效。