arr[0]
arr[1]
arr[2]
arr[3]
после компиляции эти записи будут преобразованы в:
integer(arr + 0*4)^
integer(arr + 1*4)^
integer(arr + 2*4)^
integer(arr + 3*4)^
т.е. как можно заметить чтение и запись любого элемента в массиве это всегда смещение базового адреса массива на нужный индекс элемента с учетом его типа. Поэтому:
arr[i] => integer(arr + i*4)^[/code]
а теперь представим, что мы делаем первым индексом массива 1. Поскольку на уровне процессора таких команд нет, то у компилятора остается только один выход из создавшегося положения - искуственно приводить индекс массива к 0. Т.е. делать так:
arr[i] => integer(arr + (i-1)*4)^[/code]
и тем самым заведомо на порядок ухудшать эффективность работы с массивами. Так что лучше заранее привыкать к тому, что первый элемент массива имеет индекс 0.