我不认为有很好的理由让列表和数组从索引 0 开始。我认为让它们从 1 开始更自然,如L[1],...,L[length(L)]
. 也有使用 1 而不是 0 的语言,比如 Matlab,但是很少见。
有人有理由从零开始列表中的索引吗?
PD:我已经阅读了 Dijkstra 参数和 C 中的指针参数,它们讨论了指针的内存偏移。我不觉得他们很有说服力。
在编程的早期,大多数面向内存的事情和程序员不得不在地址方面遭受很多痛苦。引入基于 1 的索引可能会为处理系统编程的程序的地址计算造成另一次破坏(计算开销)。这是一个非常将数组和指针保持为彼此类似表示的充分理由。
可以公平地观察到,对后数组集合使用基于 0 的索引本身并不是必需的,但是拥有两个索引系统是一件麻烦事(我在想 VB6 集合与数组),而且使用单个索引系统有助于同时处理这两个原语和复杂的集合类型一致(甚至通常取决于所讨论的语言)。因此,鉴于根据类型有选择地使用基于 1 和 0 的索引充其量没有任何好处,并且至少使用基于 0 的索引有一些好处,我猜这就是它持续存在的原因。