TURBO PASCAL |
Новости
|
Открытые параметры-массивыФормальный параметр, описанный с помощью синтаксиса: 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'). |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |