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; }
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:
- índices de array a partir de 1
- í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