Я знаю, что на вопрос дан ответ, но я не мог удержаться от этого объяснения.
Я помню принципы построения компилятора. Предположим, что a - массив int, размер int равен 2, а базовый адрес a равен 1000.
Как a[5]будет работать ->
Base Address of your Array a + (index of array *size of(data type for array a))
Base Address of your Array a + (5*size of(data type for array a))
i.e. 1000 + (5*2) = 1010
Это объяснение также является причиной того, почему отрицательные индексы в массивах работают в C.
т.е. если я получу доступ, a[-5]он даст мне
Base Address of your Array a + (index of array *size of(data type for array a))
Base Address of your Array a + (-5 * size of(data type for array a))
i.e. 1000 + (-5*2) = 990
Он вернет мне объект в местоположении 990. С помощью этой логики мы можем получить доступ к отрицательным индексам в массиве в C.
somearray-2не определены, если результат не находится в диапазоне от началаsomearrayдо 1 после его конца.