Я просто читал некоторый код и обнаружил, что человек использовал arr[-2] для доступа к 2-му элементу перед arr, например:
|a|b|c|d|e|f|g|
       ^------------ arr[0]
         ^---------- arr[1]
   ^---------------- arr[-2]
Разрешено ли это?
Я знаю, что arr[x] совпадает с *(arr + x). Итак, arr[-2] - *(arr - 2), что кажется ОК. Как вы думаете?