Я пытался отредактировать приведенный выше ответ, чтобы улучшить его, но редактор продолжает отклонять мою публикацию.Массивы могут иметь отрицательные индексы.
var
A:array[-20..9] of integer;
B:array[-30..-10] of integer;
Оба они одинаковы, массив из 20 целых чисел, но компилятор не будет обрабатывать их одинаково, поскольку диапазон индекса отличается.Позволяет сделать данные подходящими для проблемной области, а не наоборот.
Теперь строка, подобная var S:string[200];
, технически эквивалентна var s:packed array[0..200] of char
, где байт 0 - длина, кроме случаев, когда вы используете строкубез длины или заданная длина больше 255, тогда строка равна 1 до любого текущего размера.Поскольку строки могут быть динамическими, не рекомендуется зависеть от 0-го элемента, чтобы содержать длину.