Quick A: See below
Recently on SO:
The C standard defines the  operator as follows:a[b] == *(a + b)
Therefore a will evaluate to:*(a + 5)
and 5[a] will evaluate to:*(5 + a)
a is a pointer to the first element of the array. a is the value that's 5 elements further from a, which is the same as *(a + 5), and from elementary school math we know those are equal (addition is commutative).