Quote from the C11 standard:
Array substring (§ 6.5.2.1)
The definition of an index operator []is that which is E1[E2]identical (*((E1)+(E2))).
I would like to know why parentheses are needed around E1(they were not in the C89 standard), i.e. in which expression may (*(E1+(E2)))be different from (*((E1)+(E2)))?
source
share