Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Открытые параметры-массивы

Формальный параметр, описанный с помощью синтаксиса:

array of T

является открытым параметром-массивом. T должно быть идентифика-

тором типа, а фактический параметр должен быть переменной типа T,

или массивом, типом элементов которого является T. В процедуре

или функции формальный параметр ведет себя так, как если бы он

был описан следующим образом:

arra[0..N - 1] of T

где N - число элементов в фактическом параметре. По существу,

диапазон индекса фактического параметра отображается в диапазон

целых чисел от 0 до N - 1. Если фактический параметр - это прос-

тая переменная типа T, то он интерпретируется как массив с одним

элементом типа T.

К открытому формальному параметру-массиву можно обращаться

только по элементам. Присваивания всему открытому массиву не до-

пускаются, и открытый массив может передаваться другим процедурам

или функциям только как открытый параметр-массив или нетипизиро-

ванный параметр-переменная.

Открытый параметр-массив может быть параметром-значением,

параметром-константой и параметром-переменной и имеет тот же

смысл, что и обычные параметры-значения, параметры-константы и

параметры-переменные. В частности, присваивания элементам фор-

мального открытого массива-константы не допускаются, а присваива-

ния элементам формального открытого массива, являющегося парамет-

ром-значением, не влияют на фактический параметр.

Для открытых массивов-значений компилятор создает в кадре

стека процедуры или функции локальную копию фактического парамет-

ра. Таким образом, при передаче в качестве открытых парамет-

ров-значений больших массивов следует учитывать возможное пере-

полнение стека.

При применении к открытому параметру-массиву стандартная

функция Low возвращает 0, стандартная функция High возвращает ин-

декс последнего элемента в фактическом параметре-массиве, а функ-

ция SizeOf возвращает размер фактического параметра-массива.

Процедура Clear в следующем примере присваивает каждому эле-

менту массива вещественных значений ноль, а функция Sum вычисляет

сумму всех элементов массива вещественных чисел. Поскольку в обо-

их случаях параметр A является открытым параметром-массивом,

подпрограммы могут работать с любым массивом элементов типа Real:

procedure Clear(var A: array of Real);

var

I: Word;

begin

for I := 0 to High(A) do A[I] := 0;

end;

function Sum(const A: array of Real): Real;

var

I: Word;

S: Real;

begin

S := 0;

for I := 0 to High(A) do S := S + A[I];

Sum := S;

end;

Когда типом элементов открытого параметра-массива является

Char, фактический параметр может быть строковой константой. Нап-

ример, с учетом предыдущего описания:

procedure PringStr(const S: array of Char);

var

I: Integer;

begin

for I := 0 to High(S) do

if S[I] <> #0 then Write(S[I]) else Break;

end;

и допустимы следующие операторы процедур:

PrintStr('Hello word');

PrintStr('A');

При передаче в качестве открытого параметра-массива пустая

строка преобразуется в строку с одним элементом, содержащим сим-

вол NULL, поэтому оператор PrintStr('') идентичен оператору

PrintStr('#0').

Соседние файлы в предмете Программирование на Pascal