Quoting from the C11 standard :
Array subsripting (§ 6.5.2.1)
The definition of the subscript operator
[]is thatE1[E2]is identical to(*((E1)+(E2))).
I would like to know why are the brackets around E1 necessary (they were missing in the C89 standard), ie in which expression can (*(E1+(E2))) be different from (*((E1)+(E2))) ?
+and[]have different priorities, so ifE1is an expression it could bind differently to the+behind.E1[E2]proves that howeverE1is composed, its parts are bound at least as tightly as the subscript operator. That implies it binds more tightly than+, so how couldE1+(E2)differ from(E1)+(E2)? Yet the change from 1989 to 1999 suggests there is some reason. This is a good question.