What is the following C code doing?
int i; int* p = &i; 0[p] = 42;
I would have though that this would not event compile. But it even executes without a segmentation fault. So I wonder what strange use of the [] operator I have missed.
[]
The C Standard defined the operator [] this way:
Whatever a and b are a[b] is considred as *((a)+(b))
a
b
a[b]
*((a)+(b))
And that's why 0[p] == *(0 + p) == *(p + 0) == p[0] which is the first element of the array.
0[p] == *(0 + p) == *(p + 0) == p[0]
0[p] is equivalent to p[0]. Both are converted as
0[p]
p[0]
0[p] = *(0+p) and p[0] = *(p+0)
From above statements both are equal.
in 0[p] = 42;
0[p] = 42;
is equivalent to p[0]
+ operation is commutative and we have:
+
p[0] == *(p + 0) == *(0 + p) == 0[p]