![]() |
![]() |
||
![]() |
13.2. Параметры-переменныеЕсли перед именем формального параметра стоит ключевое слово VAR, то такой параметр есть параметр-переменная. Примерами таких параметров служат X1 и Х2 в заголовке ![]() Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой и не выражением). При вызове процедур (функций) параметры-переменные обрабатываются так: для формального параметра используется именно та ячейка, которая содержит соответствующий фактический параметр. Пример. При вызове процедуры SQ оператором SQ(P,Q, R,Y,Z) для переменных X1 и Х2 используются непосредственно те ячейки, которые отведены для Y и Z. Поэтому оператор присваивания Х1: = (-B+SQRT(D))/(2*A) засылает полученное значение в ячейку Y. Под формальные и фактические параметры-значения транслятор отводит разные области памяти. Поэтому результат выполнения процедуры может быть передан только через параметр-переменную. Пример. ![]() Результаты, выдаваемые процедурой Н:1 и 1; программа печатает 0 и 1. Разберем этот пример: фактический параметр А соответствует формальному параметру-значению X, а фактический параметр В -' формальному параметру-переменной Y. Под параметры А и X отведены две разные ячейки памяти, а под В и Y - однаи та же ячейка. При обращении к Н(А,В) из ячейки А пересылается значение О в ячейку X, а в ячейку Y засылается адрес ячейки В, содержащей О, так как в процедуре Н параметр X - это параметр-значение, a Y - параметр-переменная. При выполнении оператора Х: = Х+1 в ячейку X прибавляется 1 и в ячейке X окажется 1, а в ячейке А по-прежнему - 0. Выполнение оператора Y: = Y + 1 имеет следующий смысл: "взять число из ячейки, адрес которой находится в Y (т. е. из ячейки В), прибавить 1 и заслать в ту же ячейку (т. е. в В)." Поэтому в результате выполнения оператора Y: = Y + 1 значение ячейки В станет 1. Оператор печати из процедуры WRITELN (X, Y) выдаст содержимое ячейки X и ячейки Y, т. е. 1 и 1. Оператор печати WRITELN (А, В) в программе напечатает содержимое А, которое осталось равным 0, и содержимое ячейки В, которое равно 1. Процедуры в паскале допускают рекурсию, т. е. процедур может вызвать сама себя. Если в процедуре Р есть обращение к процедуре Q, описанной ниже, то перед описанием Р процедура Q декларируется как FORWARD: после заголовка процедуры Q ставится двоеточие, а за чем ключевое слово FORWARD*. Пример. ![]() * (Обращаем внимание, что в этом случае параметры процедуры описываются только в операторе с FORWARD. В заголовке самой процедуры параметры опускаются. Подробнее о рекурсии сказано в п. 14.3.)
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
![]() |
|||
© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна: http://informaticslib.ru/ 'Библиотека по информатике' |