为什么在大多数编程语言中数组索引都为零?

时间:2013-08-16 22:23:08

标签: arrays indexing

C ++,C#,C,D,Java,...基于零。

Matlab是我所知道的唯一从1开始的语言。

6 个答案:

答案 0 :(得分:5)

数组在c和c ++中为零,表示从项目列表开头的偏移量。

这两行在c。

中的结果相同
anArray[3] = 4;
*(anArray +3) = 4; 

第一个是标准索引器,第二个是指针将id添加到id然后解除它。这与索引器相同。

答案 1 :(得分:1)

我猜因为数组使用指针算法来引用某个值。基本上数组有连续的内存,如果你想引用第5个元素(a [4]),那么执行+ 4 *大小的int

假如你从1开始然后引用第5个元素你就必须做类似+(5-1)* int的大小

答案 2 :(得分:1)

好吧,考虑一下Dijkstra的着名文章Why numbering should start at zero。他认为编号应该从0开始,因为这意味着数组中的有效索引可以描述为0 <= i < N。在美学层面上,这显然比1 <= i < N + 1更具吸引力。

(有人可能会问,“为什么不说0 < i <= N”,但他也反对这一点,再次出于美学原因。)

答案 3 :(得分:0)

我想这主要是历史原因,新语言只是尝试使用程序员熟悉的现有约定。

此规则源自的旧语言接近金属,索引实际上是距起始元素的距离,因此0对第一个元素有意义。

答案 4 :(得分:-1)

可能“C”得到它是因为它更有效率。要计算基于0的数组中项目的地址,对于多个Index by ItemSize就足够了,对于基于1的数组,您必须计算(Index-1)* ItemSize。 “C”,然后是“C ++”,其中大多数流行语言,所以新语言必须遵循相同的规则,它有助于避免使用C / C ++的人的错误。 但是这个问题似乎是非正式的,我想它会被主持人关闭。

P.S。在Delphi / Pascal中,字符串是基于1的,但对于数组,您必须提供范围,因此您可以使用您喜欢的字符串。

答案 5 :(得分:-1)

因为有10个整数0..9