Why is a[i] == i[a] in C/C++ arrays?
The definition of [] subscript operator operator in C, according to (C99, 6.5.2.1p2), is that
E1[E2] is identical to (*((E1)+(E2)))
Compilers use pointer arithmetic internally to access array elements. And because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).
Therefore, a[b] is defined as :
a[b] == *(a + b)
So will evaluate to
a[8] == *(a + 8)
Here, a is a pointer to the first element of the array and a[8] is the value of an elements which is 8 elements further from a, which is the same as *(a + 8) and 8[a] will evaluate to following which means both are same.
8[a] == *(8 + a)
So by addition commutative property, a[8] == 8[a]
Sample program showing above results :
#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;
}
|
Output:
a[5] is 6
5[a] is 6
Last Updated :
01 Jul, 2017
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...