The C standard defines the [] operator as follows:
a[b] == *(a + b)
Therefore a[5] will evaluate to:
*(a + 5)
and 5[a] will evaluate to:
*(5 + a)
and from elementary school math we know those are equal.
This is the direct artifact of arrays behaving as pointers, “a” is a memory address. “a[5]” is the value that’s 5 elements further from “a”. The address of this element is “a + 5″. This is equal to offset “a” from “5” elements at the beginning of the address space (5 + a).
#include <stdio.h>
int main()
{
int a[10]={9,2,3,4,7,6,5,8,1,10};
//a[b]=*(a+b)
printf("%d\n",a[5]);
printf("%d\n",*(a+5));
printf("%d\n",*(5+a));
printf("%d\n",5[a]);
return 0;
}
![array](http://coder52.qiniudn.com/array.png)