在0处启动数组的好处?

时间:2011-12-15 21:02:41

标签: math language-agnostic computer-science

在大多数编程语言中从0开始的数组索引的目的是什么,与我们引用IRL(第一,第二,第三等)的顺序方式形成鲜明对比?这背后的逻辑或效用是什么?

我现在已经习惯了,但从未停下来思考背后的原因。

更新:我从谷歌搜索中了解到的一个好处是,如果你想要达到i < n,for循环可以有n

6 个答案:

答案 0 :(得分:9)

Dijkstra在Why numbering should start at zero中列出了推理。

  

当处理长度为N的序列时,我们希望通过下标区分其中的元素,下一个令人烦恼的问题是要分配给其起始元素的下标值...

     

当以下标1开始时,下标范围1≤i<1。 N + 1;然而,从0开始,给出更好的范围0≤i<0。 N.所以让我们让我们的序数从零开始:元素的序数(下标)等于序列中它前面的元素数。这个故事的寓意是,在所有这几个世纪之后我们都会更好地考虑! - 零作为最自然的数字。

答案 1 :(得分:2)

Dijkstra在1982年写了一篇非常有趣的论文:Why numbering should start at zero

答案 2 :(得分:2)

当我们像[i]一样按索引访问项时,编译器将其转换为[a + i]。所以第一个元素的索引是零,因为[a + 0]会给我们'a'指向数组中的第一个项目。对于C ++而言,这显然是显而易见的,但对于C#等最近的语言则不然。

答案 3 :(得分:0)

你可以谷歌,它已经有很多关于它的讨论。我要说第一个元素从开头(它是)的偏移为零的事实当然是有道理的。

答案 4 :(得分:0)

因为Dijkstra said so

答案 5 :(得分:0)

在旧的汇编程序中,偏移从零开始是很自然的。

dcl   foo(9)
ldx0  0 'offset to index register 0

lda   foo,x0 'get first element
adx0  1,du   'get 2nd
ldq   foo,x0

从硬件的角度来看,它更有意义。