所以在我公寓的电梯里,按钮不是(在英国)标有:G,1,2,3等。也不是美国时尚:1,2,3,4等。
他们被标记为:0,1,2,3,即他们是从0开始的索引
我虽然对自己说:'显然,如果你要编写类似goToFloor的函数来表示在楼层之间移动,你可以通过元素的索引来实现。简单!的
然后我意识到并非所有语言都从0开始,有些语言从1开始。
这个决定是如何做出的?它是效率之一(我怀疑它!)?对新程序员的轻松(可以说,任何一次犯错的人都不会再这样做了吗?)
我看不出编程语言会偏离标准的任何原因,无论是0,1还是任何其他数字。考虑到这一点,或许有助于了解第一种具有索引能力的语言,然后是第一种破解任何约定的语言?
我希望这对于SO来说不是一个'愚蠢'的问题,我非常渴望听到索引背后的历史。
答案 0 :(得分:2)
第一个“语言”将是汇编程序。数组只是第一个元素的内存地址。要访问数组中的一个元素,需要添加偏移量。因此,如果数组位于t0
位置,则t0+0
是第一个元素,t0+1
是第二个元素等。这导致索引从0开始。后来,更高级别的语言添加了更好的语法,但索引保持不变。
然而,有时会例外。例如,在Pascal中,String是一个字节数组。但是,数组/字符串的第一个字节存储字符串的长度,因此第一个字母存储在索引1中。但索引0仍然存在,可用于获取所述长度。
答案 1 :(得分:2)
当设计第一种编程语言时,它常常从0开始,因为数组映射到内存位置。数组映射到内存位置,该数字用作偏移量以检索相邻值。根据这个,这个数字应该被看作是从开始的距离,而不是数组中的顺序。
从数学的角度来看,这是有道理的,因为它有助于更自然地实现算法。
然而0对人类没有吸引力,因为我们从1开始计数。这是反直觉的,这就是为什么有些语言决定在1处“伪造”起始数组的原因。(注意,其中一些像VB一样可以让你选择介于0和1之间的数组。)
有关此主题的有趣信息可以在这个着名的Dijkstra文章中找到: