10

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.

Danvil
  • 21,262
  • 19
  • 63
  • 87

3 Answers3

13

The C Standard defined the operator [] this way:

Whatever a and b are a[b] is considred as *((a)+(b))

And that's why 0[p] == *(0 + p) == *(p + 0) == p[0] which is the first element of the array.

Danvil
  • 21,262
  • 19
  • 63
  • 87
rullof
  • 6,656
  • 5
  • 23
  • 34
9

0[p] is equivalent to p[0]. Both are converted as

0[p] = *(0+p) and p[0] = *(p+0)

From above statements both are equal.

Chinna
  • 3,792
  • 4
  • 24
  • 48
7
0[p]

in 0[p] = 42;

is equivalent to p[0]

+ operation is commutative and we have:

p[0] == *(p + 0) == *(0 + p) == 0[p]
ouah
  • 138,975
  • 15
  • 262
  • 325