1

How does a[i] and i[a] give the same result in C?

|i| is not an array, so i[a] should be syntactically incorrect, but gives the same output as a[i].

I have tested the code at Codepad.

Please explain.

Thanks.

Abhishek Potnis
  • 837
  • 8
  • 18

2 Answers2

1

From C-FAQ:

Q: I came across some joke code containing the expression 5["abcdef"] . How can this be legal C?

A: Yes, Virginia, array subscripting is commutative in C. [footnote] This curious fact follows from the pointer definition of array subscripting, namely that a[e] is identical to *((a)+(e)), for any two expressions a and e, as long as one of them is a pointer expression and one is integral. The ``proof'' looks like

a[e]
*((a) + (e))    (by definition)
*((e) + (a))    (by commutativity of addition)
e[a]        (by definition)

This unsuspected commutativity is often mentioned in C texts as if it were something to be proud of, but it finds no useful application outside of the Obfuscated C Contest (see question 20.36).

Since strings in C are arrays of char, the expression "abcdef"[5] is perfectly legal, and evaluates to the character 'f'. You can think of it as a shorthand for

char *tmpptr = "abcdef";

... tmpptr[5] ...
David Ranieri
  • 39,972
  • 7
  • 52
  • 94
0

Because you can do the following:

a[i] == *(a + i) == *(i + a) == i[a]

Take a look here.

Community
  • 1
  • 1
pzaenger
  • 11,381
  • 3
  • 45
  • 46