Do you know that the following is legal C code?
const char * x = "abcdefgh";
int pos = 4;
char tmp1 = (5*2-6)[x];
char tmp2 = pos[x];
assert(tmp1 == 'e');
assert(tmp2 == 'e');
The point here is that compiler evaluates x[y] as (char&)(x + y) or (char&)(y + x).
So regardless of what comes first, the result is the same.