Иллюстрированный самоучитель по Tirbo Pascal


Параметры - часть 3


Для того чтобы понять, в каких случаях использовать тот или иной тип параметров, рассмотрим, как осуществляется замена формальных параметров на фактические в момент обращения к подпрограмме.

Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме. Важно учесть, что даже если в качестве фактического параметра указано простейшее выражение в виде переменной или константы, все равно подпрограмме будет передана лишь копия переменной (константы). Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра.

Если параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия (фактически в этом случае подпрограмме передается адрес переменной). Изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе.

В случае параметра-константы в подпрограмму также передается адрес области памяти, в которой располагается переменная или вычисленное значение. Однако компилятор блокирует любые присваивания параметру-константе нового значения в теле подпрограммы.

Представленный ниже пример 8.2 поясняет изложенное. В программе задаются два

целых числа 5 и 7, эти числа передаются процедуре INC2, в которой они удваиваются. Один из параметров передается как параметр-переменная, другой - как параметр-значение. Значения параметров до и после вызова процедуры, а также результат их удвоения выводятся на экран.

Пример 8.2

а : Integer = 5; 

b : Integer = 7 ;

{-----------------}

Procedure Inc2 (var c: Integer; b: Integer) ; 

begin {Inc2} 

с := с + с; 

b := b + b; 

WriteLn ( 'удвоенные: ', c:5, b:5)

end {inc2}; 

{--------------}

begin {main}

WriteLn('исходные: ', a:5, b:5);

Inc2(a,b);

WriteLn('результат: ', a:5, b:5) 

end {main}.




Начало  Назад  Вперед



Книжный магазин