a[b]
Эквивалентно *(a + b), поэтому ...
*(a + b)
a[b & c]
Где & имеет более низкий приоритет оператора, чем +, это приведет к *(a + b & c) или *(a + (b & c))
&
+
*(a + b & c)
*(a + (b & c))
a[b] - *((a) +(b)), поэтому a[b & c] - *((a)+(b & c)), *(a+(b & c)), если вы предпочитаете
*((a) +(b))
*((a)+(b & c))
*(a+(b & c))
Стандарт C, § 6.5.2.1 , Подписка на массив говорит:
Определение оператора индекса [] означает, что E1[E2] идентичен (*((E1)+(E2)))
[]
E1[E2]
(*((E1)+(E2)))
Обратите внимание на скобки, окружающие E2.Последнее выражение (*(a + (b & c))) является правильным результатом.
E2