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)`

`a`

is a pointer to the first element of the array. `a[5]`

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).