Из этого поста в SO ясно, что C поддерживает отрицательные индексы.
-  
Зачем поддерживать такое потенциальное нарушение памяти в программе?
 -  
Разве компилятор не должен выдавать предупреждение "Отрицательный индекс" хотя бы? (использую GCC)
 -  
Или этот расчет выполняется во время выполнения?
 
РЕДАКТИРОВАТЬ 1: Кто-нибудь может намекнуть на его использование?
РЕДАКТИРОВАНИЕ 2: для 3.) Использование счетчиков циклов в
[]массивов/указателей указывает расчет индексов во время выполнения.