¿Por qué los índices de matriz están basados ​​en cero en la mayoría de los lenguajes de progtwigción?

C ++, C #, C, D, Java, … se basan en cero.

Matlab es el único idioma que conozco que comienza en 1.

Las matrices están basadas en cero en c y c ++ ya que representan el desplazamiento desde el comienzo de la lista del artículo.

Estas dos líneas tienen el mismo resultado en c.

anArray[3] = 4; *(anArray +3) = 4; 

El primero es el indexador estándar, el segundo toma el puntero y agrega tres a id y luego lo desengrana. Que es lo mismo que el indexador.

Supongo que porque las matrices usan la aritmética del puntero para referirse a algún valor. Básicamente, las matrices tienen memoria contigua y, si desea hacer referencia al quinto elemento (a [4]), se realiza un tamaño + 4 * de int.

Digamos que si comienzas con 1 entonces para referirte al 5to elemento deberás hacer algo como un + (5-1) * tamaño de int

Bien, considere el famoso artículo de Dijkstra, Por qué la numeración debería comenzar en cero . Sostiene que la numeración debe comenzar en 0 porque significa que los índices válidos en una matriz se pueden describir como 0 < = i < N . Esto es claramente más atractivo que 1 < = i < N + 1 , en un nivel estético.

(Uno podría preguntarse, "¿por qué no decir 0 < i <= N ", pero también argumenta en contra de eso por razones estéticas?)

Supongo que tiene razones principalmente históricas, los nuevos lenguajes simplemente intentan usar la convención existente con la que los progtwigdores están familiarizados.

Los lenguajes antiguos a partir de los cuales se originó esta regla estaban cerca del metal, y un índice es realmente la distancia desde el elemento inicial, por lo tanto, 0 tiene sentido para el primer elemento.

Probablemente “C” lo obtuvo porque es más eficiente. Para calcular la dirección del artículo en una matriz basada en 0, es suficiente indexar múltiples por tamaño de artículo, para una matriz basada en 1 debe calcular (índice-1) * Tamaño de artículo. “C” y luego “C ++” son los idiomas más populares, por lo que los nuevos lenguajes deben seguir las mismas reglas, esto ayuda a evitar errores para quienes usan C / C ++. Pero esta pregunta parece ser atípica y supongo que será cerrada por el moderador.

Las cadenas PS In Delphi / Pascal están basadas en 1, pero para las matrices debe proporcionar el rango y así puede usar lo que quiera.

Porque hay 10 enteros 0..9