Массивы в Pascal
Массивы в сильно типизированных языках
Тип массива в таких языках определяется на основе двух вспомогательных типов: типа элементов массива (базового типа) и типа индекса массива.
В языке Паскаль определение типа массива выглядит следующим образом:
type T = array [I] of BT,
где
`"BT"` – базовый тип, а
`I` – тип индекса.
BT может быть любым встроенным или ранее определенным типом.
Тип индекса
`I` должен состоять из конечного числа перечисляемых значений, т.е. быть уточненным, перечисляемым, символьным или булевским типом.
В языках линии Паскаль допускается и неявное определение уточненного типа массива. Например, допустимы следующие определения типа массива:
type T = array [1..6] of integer;
или
type T = array ['a'..'e'] of real.
Если мощность множества значений типа индекса есть n, то значение типа массива – это регулярная структура, включающая n элементов базового типа.
Соответствующим образом устроены и переменные типа массива.
Для любого сконструированного типа массива предопределены две операции – операция конструирования значения типа массива и операция выборки элемента массива.
Если
`x` – переменная типа массива
`T`, а
`i` – значение соответствующего типа индекса, то для конструирования значения используется языковое средство
x:= T (c1, c2, ..., cn),
где c1, c2, …, cn – значения базового типа.
Для выборки элемента массива используется конструкция `x[i]`, значением которой является значение `i-`того элемента массива (вместо `i` в квадратных скобках может содержаться любое допустимое выражение, значение которого принадлежит множеству значений типа индекса).
Эта же конструкция может использоваться в левой части оператора присваивания, т.е. элементы массива могут изменяться индивидуально.
Кроме того, при подобной строгой типизации массивов допустимы присваивания значений переменных типа массива, функции, возвращающие значение типа массива и т.п.
Базовым типом типа массива может быть любой встроенный или определенный тип, в том числе и тип массива. В последнем случае говорят о многомерных массивах или матрицах. Для работы с многомерными массивами в языках используют сокращенную запись.
Например, вместо определения
type T = array [1..10] of array [1..5] of real;
можно написать
type T = array [1..10],[1..5] of real;
а если `x` – переменная такого типа `T`, то для выборки скалярного элемента вместо `x[i][j]` можно написать `x[i,\ j]`.
В сильно типизированных языках для любого значения типа массива известно число элементов базового типа. Поэтому в принципе всегда возможен контроль значения индекса, хотя на практике такой контроль обычно отменяется при использовании программы в производственном режиме.