为什么有些语言的索引从0开始而不是1?效率?

时间:2012-09-21 23:11:52

标签: language-agnostic indexing history

所以在我公寓的电梯里,按钮不是(在英国)标有:G,1,2,3等。也不是美国时尚:1,2,3,4等。

他们被标记为:0,1,2,3,即他们是从0开始的索引

我虽然对自己说:'显然,如果你要编写类似goToFloor的函数来表示在楼层之间移动,你可以通过元素的索引来实现。简单!

然后我意识到并非所有语言都从0开始,有些语言从1开始。

这个决定是如何做出的?它是效率之一(我怀疑它!)?对新程序员的轻松(可以说,任何一次犯错的人都不会再这样做了吗?)

我看不出编程语言会偏离标准的任何原因,无论是0,1还是任何其他数字。考虑到这一点,或许有助于了解第一种具有索引能力的语言,然后是第一种破解任何约定的语言?

我希望这对于SO来说不是一个'愚蠢'的问题,我非常渴望听到索引背后的历史。

2 个答案:

答案 0 :(得分:2)

第一个“语言”将是汇编程序。数组只是第一个元素的内存地址。要访问数组中的一个元素,需要添加偏移量。因此,如果数组位于t0位置,则t0+0是第一个元素,t0+1是第二个元素等。这导致索引从0开始。后来,更高级别的语言添加了更好的语法,但索引保持不变。

然而,有时会例外。例如,在Pascal中,String是一个字节数组。但是,数组/字符串的第一个字节存储字符串的长度,因此第一个字母存储在索引1中。但索引0仍然存在,可用于获取所述长度。

答案 1 :(得分:2)

当设计第一种编程语言时,它常常从0开始,因为数组映射到内存位置。数组映射到内存位置,该数字用作偏移量以检索相邻值。根据这个,这个数字应该被看作是从开始的距离,而不是数组中的顺序。

从数学的角度来看,这是有道理的,因为它有助于更​​自然地实现算法。

然而0对人类没有吸引力,因为我们从1开始计数。这是反直觉的,这就是为什么有些语言决定在1处“伪造”起始数组的原因。(注意,其中一些像VB一样可以让你选择介于0和1之间的数组。)

有关此主题的有趣信息可以在这个着名的Dijkstra文章中找到: