
II часть
1 Вопрос.
Безтиповые, Var Ident, где Ident — идентификатор формального параметра. Фактический параметр, соответствующий формальному нетипизированному, должен представлять собой переменную любого типа (но не выражение).Единственным способом использования таких параметров является "наделение" их определённым типом. Существуют два способа: 1)Применить операцию приведения типа. 2) Описать в подпрограмме локальную переменную определённого типа с совмещением её в памяти с нетипизированным параметром. 2 ВОПРОС.
К открытому формальному параметру-массиву можно обращаться только по элементам. Присваивания элементам формального открытого массива-константы не допускаются, а присваивания элементам формального открытого массива, являющегося параметром-значением, не влияют на фактический параметр. Для открытых массивов-значений компилятор создает в кадре стека процедуры или функции локальную копию фактического параметра. Таким образом, при передаче в качестве открытых параметров-значений больших массивов следует учитывать возможное переполнение стека. При применении к открытому параметру-массиву стандартная функция Low возвращает 0, стандартная функция High возвращает индекс последнего элемента в фактическом параметре-массиве, а функция SizeOf возвращает размер фактического параметра-массива. Процедура Clear в следующем примере присваивает каждому элементу массива вещественных значений ноль procedure Clear(var A: array of Real); {А открытым параметром-массивом} var I: Word; begin for I := 0 to High(A) do A[I] := 0; end;
3 Вопрос
Открытые строковые параметры могут описываться двумя способами: - с помощью идентификатора OpenString; описывается в модуле System, не является зарезервированным словом - с помощью ключевого слова string в состоянии {$P+}. Для открытого строкового параметра фактический параметр может быть переменной любого строкового типа. В процедуре или функции максимальная длина формального параметра будет тем же, что у фактического параметра. Открытые строковые параметры ведут себя также как параметры-переменные строкового типа, их нельзя передавать как обычные переменные другим процедурам или функциям., но их можно снова передать как открытые строковые параметры. S- открытый строковый параметр процедуры AssignStr - это открытый строковый параметр: procedure AssignStr(var S: OpenString; begin S := '0123456789ABCDEF';end; Var S1: string[10]; Begin AssignStr(S1); { S1 := '0123456789' } при присваивании параметра S строка усекается, максимальная длина S1 равна 10. При применении к открытому строковому параметру стандартная функция Low возвращает 0, стандартная функция High возвращает описанную максимальную длину фактического параметра, а функция SizeOf возвращает размер фактического параметра. Значения и параметры-константы, описанные с использованием OpenString или ключевого слова string в состоянии{$P+}, не являются открытыми строковыми параметрами. Они ведут себя были описаны с максимальной длиной строкового типа 255, а функция Hingh для таких параметров всегда возвращает 255.