Я знаю, что на вопрос дан ответ, но я не удержался от того, чтобы поделиться этим объяснением.
Я помню Принципы разработки компилятора. Предположим, что a является массивом int, а размер int равен 2, & Base addressдля 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.