Я знаю, що на це питання відповіли, але я не втримався поділитися цим поясненням.
Я пам'ятаю Принципи дизайну компілятора, припустимо, що це 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 минулого кінця.