With arrays, why is it the case that a[5] == 5[a]?
arrays, c, pointer-arithmetic, pointers
Solution
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).
Problem
As Joel points out in Stack Overflow podcast #34, in C Programming Language (aka: K & R), there is mention of this property of arrays in C: `a[5] == 5[a]` Joel says that it's because of pointer arithmetic but I still don't understand. Why does `a[5] == 5[a]`?