Масив - це регулярна структура даних, оголошується спеціальною конструкцією мови
Array [діапазони індексів] of ТіпКомпонентов
Найбільш часто масив використовують для зберігання значень векторів, наприклад:
V. Array [1..3] of Real;
оголошуючи тим самим структуру з трьох значень типу Real, проіндексованих заданим діапазоном цілих чисел (V [1], V [2] і V [3]). Якщо індексація компонентів (елементів) масиву задається числовим діапазоном, як у наведеному прикладі, то треба дотримуватися лише дві вимоги: по-перше, діапазон не повинен належати типу LongInt, тобто він зобов'язаний «вміститися» максимум в типі Word, a по-друге, твір кількості компонентів масиву, що задається діапазоном індексів, на розмір компонента в байтах, не може перевищувати 65520 байт (майже 64K). Остання вимога є загальним не тільки для всіх масивів, а й для інших структур даних. Таким чином, можуть бути описані масиви
Це дуже зручно, так як дозволяє не піклуватися про приведення індексів до діапазону 1..N, як, наприклад, доводиться надходити при роботі з Фортраном або деякими версіями Бейсика.
У загальному випадку ніщо не зобов'язує повідомляти діапазон індексів масиву числами. Як індексів можна використовувати будь-які перелічуваних типи, як вбудовані, так і вводяться. Індекси можуть задаватися як і раніше діапазоном, а якщо діапазон відповідає всьому типу, то можна замість нього просто записати ім'я цього перечислимого типу:
ComplectType = Array [MonthType] of Word;
Alpha. Array [ 'A' .. 'z'] of Char;
Switch. Array [Boolean] of Byte; <два элемента>
Розглянуті масиви - одномірні, тобто такі, у яких компоненти - скаляри. Дозволено оголошувати масиви масивів:
VectorType = Array [1..3] of Real; <вектор>
MatrixType = Array [1..10] of VectorType; <матрица10x3>
Опис типу двовимірного масиву MatrixType могло бути записано по-іншому:
MatrixType = Array [1..10] of Array [1..3] of Real;
MatrixType = Array [1..10, 1..3] of Real;
Останній варіант найбільш наочно представляє опис матриці. Кількість вимірювань формально не обмежена, але сума розмірів всіх компонентів масиву не повинна перевищувати 64K. Кожен вимір абсолютно не залежить від інших, і можна оголошувати масиви з різними індексами:
M. Array [-10..0, 'A' .. 'C', Boolean] of Byte;
Array [Boolean] of Byte;
Цікаво, що тип елемента масиву M залежить від числа зазначених при ньому індексів. так,
M [0] - масив-матриця типу Array [ 'A' .. 'C', Boolean] of Byte,
М [0, 'B'] - вектор типу Array [Boolean] of Byte,
M [0, 'B', False] - значення типу Byte.
ArrayBType = Array [Boolean] of Byte;
ArrayCType = Array [ 'A' .. 'C'] of ArrayBType;
ArrayMType = Array [-10..0] of ArrayCType;
і лише після цього будуть дозволені присвоювання виду
Турбо Паскаль дозволяє записувати індекси не через кому, а як би ізольовано:
M [-3, 'B', True] еквівалентно M [-3] [ 'B'] [True]
Компонентом масиву може бути не тільки інший масив, а й запис, і покажчик, і будь-якої іншої тип. Якщо R - масив записів (RECORD), то доступ до поля кожного запису проводиться після вказівки індексу:
Турбо Паскаль має спеціальний режим компіляції, що задається ключем $ R. Якщо вся програма або фрагмент її компілювався в режимі, то при зверненні до елементів масивів буде перевірятися приналежність значення індексу оголошеному діапазону, і в разі порушення кордонів діапазону програма перерветься з видачею помилки 201 (Range check Error). Навпаки, в режимі ніяких перевірок не проводиться, і некоректне значення індексу витягне «як ні в чому не бувало» якесь значення - але, на жаль, не належить даному масиву. Зазвичай програму налагоджують в режимах $ R +, а експлуатують при режимі $ R-. Це трохи зменшує розмір ЕХЕ-файла і час його виконання.
До двох сумісним масивів A і B може бути застосована тільки операція присвоювання:
яка копіює поелементно масив B в масив A.
Всілякі математичні дії над масивами (матрицями) необхідно реалізовувати самим або використовувати спеціальні бібліотеки (наприклад, Turbo Numeric Toolbox).
Для сумісності з іншими версіями Паскаля Турбо Паскаль допускає використання складених символів (. І.) Замість квадратних дужок:
M [0] еквівалентно M (. 0.)
Крім того, ключове слово Array в описах масивів може передувати зарезервованим словом PACKED (упакований, стислий):
X. PACKED Array [1..100] of Real;
На завершення відзначимо одну особливість компілятора Турбо Паскаля. Для багатьох мов програмування справедливо правило: робота з елементом масиву займає більше часу, ніж зі скалярної змінної (треба обчислювати місцеположення елемента в пам'яті). Якщо індекси при зверненні до елементу задаються змінними або виразами, то це вірно і для Турбо Паскаля. Але якщо індекс елемента задається константою, то швидкість звернення до нього буде максимальною, тому що компілятор в цьому випадку вирахує розташування елемента ще на етапі компіляції програми.