¿Por qué a[i] == i[a] en arreglos C/C++?

La definición de [] subíndice operator operator en C, según (C99, 6.5.2.1p2), es que

 E1[E2] is identical to (*((E1)+(E2)))

Los compiladores usan la aritmética de punteros internamente para acceder a los elementos de la array. Y debido a las reglas de conversión que se aplican al operador binario +, si E1 es un objeto de array (equivalentemente, un puntero al elemento inicial de un objeto de array) y E2 es un número entero, E1[E2] designa el elemento E2-th de E1 (contando desde cero).

Por lo tanto, a[b] se define como:

a[b] == *(a + b)

Entonces evaluará a

a[8] == *(a + 8)

Aquí, a es un puntero al primer elemento de la array y a[8] es el valor de un elemento que está 8 elementos más lejos de a, que es lo mismo que *(a + 8) y 8[a] evaluará a seguir lo que significa que ambos son iguales.

8[a] == *(8 + a)

Entonces, por propiedad conmutativa adicional , a[8] == 8[a]

Programa de muestra que muestra los resultados anteriores:

// C program to illustrate
// a[i] == i[a] in arrays 
#include <stdio.h>
int main()
{
    int a[] = {1, 2, 3, 4, 5, 6, 7};
    printf("a[5] is %d\n", a[5]);
    printf("5[a] is %d\n", 5[a]);
    return 0;
}

Producción:

a[5] is 6
5[a] is 6

Este artículo es una contribución de Mandeep Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *