Thursday, 22 October 2015

With C arrays, why we can write that a[5] == 5[a]?

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 we know those are equal. (Addition is commutative.)

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


No comments:

Post a Comment