1

因此,在我公寓的电梯中,按钮没有(在英国)标记为:G、1、2、3 等。也不是美国时尚的:1、2、3、4 等。

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

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

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

这个决定是如何做出的?它是效率之一(我对此表示怀疑!)?对新程序员感到轻松(可以说,任何犯过错误的人都不会再犯)?

我看不出编程语言有任何偏离标准的原因,无论是 0、1 还是任何其他数字。考虑到这一点,也许了解第一种能够索引的语言以及第一种打破既定约定的语言会有所帮助吗?

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

4

2 回答 2

2

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

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

然而 0 对人类没有吸引力,因为我们从 1 开始计数。这与直觉相反,这就是为什么某些语言决定“伪造”起始数组为 1 的原因。(请注意,其中一些像 VB 允许您在 0 和基于 1 的数组。)

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

于 2012-09-22T08:40:34.383 回答
2

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

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

于 2012-09-21T23:25:01.353 回答