Книга: Описание языка PascalABC.NET

Статические массивы

Статические массивы

Описание статического массива

Статические массивы в отличие от динамических задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.

Тип статического массива конструируется следующим образом:

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] ofstring;

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.

Оглавление книги


Генерация: 0.033. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз