Explanation : a[2] will be converted to *(a + 2).
*(a + 2) can as well be written as *(2 + a ) .
*(2 + a ) is nothing but 2 [a] .
a [2] is essentially same as 2 [a] which is same as * ( 2 + a ).
So, it prints 9 + 9 = 18. Some of the modem compilers don't accept 2[a].