top of page

Параметры-значения

Если в качестве формального параметра указана переменная, то такой параметр и есть параметр-значение. Примерами таких параметров служат параметры a, b и с в процедуре sq: 

 

  • procedure sq((a, b, c: real; var x1, x2: real);

 

В этом случае фактическим параметром, соответствующим a либо b либо c, может быть любое выражение соответствующего типа, в частности, константа.

Например, обратиться к sq можно так:

 

  • sq((25./3 + 2) * 2, -1.5, (8.2 – 3.1) / 3, x1, x2);

 

Для параметров-значений машина при вызове процедур производит следующие действия: выделяет место в памяти для каждого формального параметра, вычисляет значение фактического параметра и записывает его в ячейку, соответствующую формальному параметру.

Если фактический параметр есть имя переменной, например, r, то значение этой переменной пересылается в соответствующий формальный параметр, например, a. На этом всякая связь между a и r обрывается.

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

 

Пример.

 

  1. var

  2.     i: integer;

  3.  

  4. procedure p(i: integer);

  5.     begin

  6.         i :=i * 2

  7.     end;

  8.  

  9. begin

  10.     i :=2;

  11.     p(i);

  12.     writeln(' i=', i);

  13.  

  14. readln

  15. end.

 

В программе происходит засылка числа 2 в ячейку, отведенную для переменнойi, затем идет обращение к процедуре p с фактическим параметром i=2. При этом значение 2 пересылается в другую ячейку, отведенную для формального параметраi. В этой ячейке после выполнения оператора i :=i * 2 появляется число 4. Но после возврата из процедуры на оператор writeln программа "знает" только одну переменную i, которая по-прежнему содержит число 2. Поэтому программа выведет i=2.

 

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

bottom of page