在大多数编程语言中从0
开始的数组索引的目的是什么,与我们引用IRL(第一,第二,第三等)的顺序方式形成鲜明对比?这背后的逻辑或效用是什么?
我现在已经习惯了,但从未停下来思考背后的原因。
更新:我从谷歌搜索中了解到的一个好处是,如果你想要达到i < n
,for循环可以有n
。
答案 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)
答案 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
从硬件的角度来看,它更有意义。