TYPE
ArrayBType = Array[Boolean] of Byte;
ArrayCType = Array ['A'..'C' ] of ArrayBType;
ArrayMType = Array [-10..0] of ArrayCType;
VAR
B : ArrayBType;
C : ArrayCType;
M : ArrayMType;
и лишь после этого будут разрешены присваивания вида
M[ -1 ] := C;
B := M[ -1, 'A' ];
Подобные вопросы совместимости можно обойти, используя приведение типов, а также специальную процедуру Move Турбо Паскаля, но это будет не повышением эффективности программы, а скорее свидетельством непродуманного объявления типов в ней.
Турбо Паскаль позволяет записывать индексы не через запятую, а как бы изолировано:
M[ -3, 'B', True ] эквивалентно M[ -3 ][ 'B' ][ True ]
- 135 -
Компонентом массива может быть не только другой массив, но и запись, и указатель, и какой-либо другой тип. Если R — массив записей (RECORD), то доступ к полю каждой записи производится после указания индекса:
R[ i ].ПолеЗаписи
В памяти ПЭВМ массивы хранятся как сплошные последовательности компонентов, причем быстрее всего изменяется самый «дальний» индекс, если их несколько. В примере задания стартового значения многомерному массиву (см. разд. 5.2.2) порядок перечисления элементов (без учета скобок) соответствует порядку размещения значений в памяти. Адрес начала массива в памяти соответствует адресу его первого элемента (элемента с минимальными значениями индексов).
Турбо Паскаль имеет специальный режим компиляции, задаваемый ключом $R. Если вся программа или фрагмент ее компилировался в режиме {$R+}, то при обращении к элементам массивов будет проверяться принадлежность значения индекса объявленному диапазону, и в случае нарушения границ диапазона программа прервется с выдачей ошибки 201 (Range check Error). Напротив, в режиме {$R-} никаких проверок не производится, и некорректное значение индекса извлечет «как ни в чем не бывало» какое-нибудь значение — но, увы, не принадлежащее данному массиву. Обычно программу отлаживают в режимах $R+, а эксплуатируют при режиме $R-. Это несколько уменьшает размер ЕХЕ-файла и время его выполнения.
К двум совместимым массивам A и B применима только операция присваивания:
A := B;
которая копирует поэлементно массив B в массив A.
Всевозможные математические действия над массивами (матрицами) необходимо реализовывать самим или использовать специальные библиотеки (например, Turbo Numeric Toolbox).
Для совместимости с другими версиями Паскаля Турбо Паскаль допускает использование составных символов (. и .) вместо квадратных скобок:
M[ 0 ] эквивалентно M(. 0 .)
Кроме того, ключевое слово Array в описаниях массивов может предваряться зарезервированным словом PACKED (упакованный, сжатый):