- 136 -
VAR
X : PACKED Array [ 1..100 ] of Real;
В Турбо Паскале данные и так хранятся максимально плотно, и слово PACKED практически игнорируется. Мы рекомендуем избегать его включения в тексты программ.
В завершение отметим одну особенность компилятора Турбо Паскаля. Для многих языков программирования справедливо правило: работа с элементом массива занимает больше времени, чем со скалярной переменной (надо вычислять местоположение элемента в памяти). Если индексы при обращении к элементу задаются переменными или выражениями, то это верно и для Турбо Паскаля. Но если индекс элемента задается константой, то скорость обращения к нему будет максимальной, потому что компилятор в этом случае вычислит расположение элемента еще на этапе компиляции программы.
7.2. Тип «запись» (Record) и оператор присоединения With
Для компактного представления комбинаций разнотипных данных их можно объединять в структуры-записи. Каждая запись состоит из объявленного числа полей. Тип «запись» определяется конструкцией
RECORD
Поле1 : ТипПоля1;
Поле2 : ТипПоля2;
...
ПолеN : ТипПоляN
END;
Если тип нескольких полей совпадает, то имена полей могут быть просто перечислены, например:
| TYPE
| PointRecType = RECORD
| x,y : Integer
| END;
После объявления в программе переменной типа «запись»
| VAR
| Point : PointRecType;
к каждому ее полю можно обратиться, указав сначала идентификатор переменной-записи, а затем через точку — имя поля: Point.x и Point.y — значения полей записи (но просто Point — уже комбинация двух значений).
- 137 -
Независимо от количества объявленных переменных данного типа, поля каждой из них будут называться одинаково, как они названы в описании типа. Поскольку имена полей «скрыты» внутри типа, они могут дублировать «внешние» переменные и поля в других описаниях записей, например:
| TYPE
| PointRecType = RECORD
| X,Y : Integer
| END;
| ColorPointRecType = RECORD
| X,Y : Integer; Color:Word
| END;
| VAR
| X, Y : Integer;
| Point : PointRecType;
| ColorPoint : ColorPointRecType;
В программе X, PointX и ColorPoint.X — совершенно разные значения. Поле записи может иметь практически любой тип (массив, другая запись, множество). Доступ к вложенным элементам таких структур осуществляется по тем же правилам, что и обычно:
Переменная_СложнаяЗапись.ЕеПоле_Запись.ПолеПоляЗаписи
или
Переменная_С_полем_массивом.ПолеМассив[i]
Порядок описания полей в определении записи задает их порядок хранения в памяти. Так, значения полей переменной ColorPoint хранятся как шесть последовательных байтов:
2 ( это X, тип Integer) + 2 ( Y, тип Integer) + 2 (для Color типа Word).