Статические массивы
Описание статического массива
Статические массивы в отличие от динамических задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.
Тип статического массива конструируется следующим образом:
array [
тип индекса1
,
...
,
тип индексаN
] of
базовый тип
Тип индекса должен быть порядковым. Обычно тип индекса является
диапазонным и
представляется в виде a..b
,
где a
и b
- константные выражения целого, символьного или перечислимого типа. Например:
type MyEnum = (w1,w2,w3,w4,w5);
Arr = array [1..10] of integer;
var
a1,a2: Arr;
b: array ['a'..'z',w2..w4] of string;
c: array [1..3] of array [1..4] of real;
Инициализация статического массива
При описании можно также задавать инициализацию массива значениями:
var
a: Arr := (1,2,3,4,5,6,7,8,9,0);
cc: array [1..3,1..4] of real := ((1,2,3,4), (5,6,7,8), (9,0,1,2));
Присваивание статического массива
Статические массивы одного типа можно присваивать друг другу, при этом будет производиться копирование содержимого одного массива в другой:
a1 := a2;
Вывод статического массива
Процедура write выводит статический массив, заключая элементы в квадратные скобки и разделяя их запятыми:
var a: Arr := (1,2,3,4,5,6,7,8,9,0);
var m := array [1..3,1..3] of integer :=
((1,2,3),(4,5,6),(7,8,9));
writeln(a); // [1,2,3,4,5]
writeln(m); //
[[1,2,3],[4,5,6],[7,8,9]]
Передача статического массива в подпрограмму
При передаче статического массива в подпрограмму по значению также производится копирование содержимого массива - фактического параметра в массив - формальный параметр:
procedure p(a: Arr); // передавать статический массив по значению - плохо!
...
p(a1);
Это крайне расточительно, поэтому статические массивы рекомендуется передавать по ссылке. Если массив не меняется внутри подпрограммы, то его следует передавать как ссылку на константу, если меняется - как ссылку на переменную:
type Arr = array [2..10] of integer;
procedure Squares(var a: Arr);
begin
for var i:= Low(a) to High(a) do
a[i] := Sqr(a[i]);
end;
procedure PrintArray(const a: Arr);
begin
for var i:= Low(a) to High(a) do
Print(a[i])
end;
var a: Arr := (1,3,5,7,9,2,4,6,8);
begin
Squares(a);
PrintArray(a);
end.
Для доступа к нижней и верхней границам размерности одномерного массива используются функции Low и High.