¿Por qué el índice de array comienza desde cero?

Requisito previo: Punteros en C/C++ 

PUEDE HABER MUCHAS RAZONES, PERO AQUÍ HAY DOS RAZONES:

Razón 1:
Considere int arr[100]. La respuesta radica en el hecho de cómo el compilador interpreta arr[i] (0<=i<100). 
arr[i] se interpreta como *(arr + i). Ahora, arr es la dirección de la array o la dirección del elemento de índice 0 de la array. Entonces, la dirección del siguiente elemento en la array es arr + 1 (porque los elementos en la array se almacenan en ubicaciones de memoria consecutivas), la dirección adicional de la siguiente ubicación es arr + 2 y así sucesivamente. Siguiendo con los argumentos anteriores, arr + me refiero a la dirección a una distancia del elemento inicial de la array. Por lo tanto, según esta definición, seré cero para el elemento inicial de la array porque el elemento inicial está a una distancia de 0 del elemento inicial de la array. Para ajustarse a esta definición de arr[i], la indexación de la array comienza desde 0. 
 

CPP

#include<iostream>
using namespace std;
 
int main()
{
    int arr[] = {1, 2, 3, 4};
 
    // Below two statements mean same thing
    cout << *(arr + 1) << " ";
    cout << arr[1] << " ";
 
    return 0;
}
Producción: 

2 2



 

La conclusión es que necesitamos acceso aleatorio en la array. Para proporcionar acceso aleatorio, los compiladores usan aritmética de punteros para alcanzar el i-ésimo elemento.

Razón 2:

Los lenguajes modernos, especialmente C++ , utilizan el ordenamiento de filas para almacenar arrays bidimensionales.

Supongamos una array 2D y escribamos una fórmula de fila principal con dos enfoques diferentes:

  1. índices de array a partir de 1
  2. índices de array a partir de 0

deje que la array 2D sea arr[m][n] de tipo int

sea ​​&arr «dirección»

caso 1 (los índices de array comienzan desde 1):

         &( arr[i][j] ) = dirección + [ ( i-1 )*n + ( j-1 ) ]*( sizeof(int) ) ] así que aquí estamos realizando 6 operaciones

caso 2 (los índices de la array comienzan desde 0):

        &( arr[i][j] ) = dirección + [ ( i )*n + ( j ) ]*( sizeof(int) ) ] y aquí estamos realizando solo 4 operaciones

Entonces vemos aquí que estamos realizando 2 operaciones menos cuando almacenamos arrays 2D y obtenemos la dirección de un elemento. Esto parece que no tiene sentido, ¡pero lo tiene! Al manejar datos de gran tamaño, esto puede mejorar el rendimiento y la velocidad. El caso 1 puede parecer fácil de usar, pero el caso 2 es más eficiente. Es por eso que la mayoría de los lenguajes como C++, PYTHON, JAVA usan arrays que comienzan con el índice 0 y rara vez lenguajes como las arrays Lua que comienzan con el índice 1.
 

Publicación traducida automáticamente

Artículo escrito por Harish Kumar 17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *