C ++,C#,C,D,Java,...基于零。
Matlab是我所知道的唯一从1开始的语言。
答案 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