Вверх ↑
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2007-01-15 15:54:27 ЛС | профиль | цитата
Так не исторически сложилось. Номер первого индекса в массиве связан с техническими реализациями этого самого массива на процессорном уровне. Вот пример: положим у нас есть массив из 4 элементов типа integer тогда в Delphi обращение к ним запишется так:
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.
карма: 27
0