Почему индекс в C можно поставить перед массивом
В C выражение с квадратными скобками — не отдельная операция поиска элемента. По правилу языка `a[i]` означает `(a + i)`: к адресу начала массива прибавляют индекс, а затем берут значение по получившемуся адресу. Знак `` здесь означает «разыменовать указатель» — обратиться к объекту, на который он указывает.
В выражении `a + 5` имя массива в большинстве таких контекстов автоматически превращается в указатель на его первый элемент. Но сложение целого числа и указателя можно записать и наоборот: `5 + a`. Поэтому `5[a]` раскрывается как `(5 + a)`, а это тот же адрес, что и `(a + 5)`. Значит, обе записи обозначают один элемент.
Не особое свойство массивов, а следствие правила
Например, если `a` — массив целых чисел, то `a[5]` и `5[a]` обращаются к шестому элементу: отсчёт начинается с нуля. При этом запись с индексом впереди не меняет порядок элементов и не создаёт новый способ доступа — она лишь показывает, что компилятор понимает квадратные скобки через указательную арифметику.
Обе формы осмысленны, только если вычисленный адрес указывает на допустимый элемент массива. Поэтому необычная запись обычно не помогает программе: она затрудняет чтение и может сбить с толку. Её ценность — в том, что на одном коротком примере видно устройство индексирования в C: индекс — это смещение от указателя, а не самостоятельная команда массива.
![В C запись 5[a] обращается к тому же адресу, что a[5]](https://cdn.stackyfacts.com/images/8d1cb281-004c-4034-beec-f92b007ea3e7_back.jpg)





