Передача параметров по значению
При вызове Р(Е) используют следующую схему вычислений:
1. Для формального параметра х выделяется место во временной памяти подпрограммы.
2. Вычисляется значение фактического параметра (выражения Е), оно заносится в ячейку формального параметра х := Е.
3. Связь между формальным и фактическим параметром разрывается.
4. Выполняется тело подпрограммы, в котором используется формальный параметр.
5. Если Р(х) — функция, то в точку вызова возвращается результат.
Следствия:
1. Фактический параметр может быть выражением.
2. С помощью формального параметра нельзя вернуть результат в точку вызова. Вызов square (Е) имеет следующий эффект.
Передача по значению используется чаще всего. В языках Pascal и С она рассматривается как основной метод передачи параметров. В этом случае формальный параметр содержит собственно значение фактического параметра (на момент вызова подпрограммы), которое и применяется для вычислений. Недостаток этого метода: итоги вычислений подпрограммы не отражаются на значениях фактических параметров. Любые изменения значения формального параметра, произошедшие во время выполнения подпрограммы, теряются, когда подпрограмма завершает свое выполнение. Пример. Рассмотрим процедуру обмена двух переменных 5№ар(х, у), которая должна обеспечивать обмен значениями между х и у. Эту процедуру будем использовать как индикатор, который «высвечивает» все особенности обсуждаемого метода передачи параметров. Используем передачу по |
значению: |
334 |
Глава 13. Подпрограммы |
Шаги вычислений при вызове 5№ар(а, Ь) по значению имеют вид: |
Видим, что, увы, обмен не состоялся. Несмотря на обмен значениями между формальными параметрами х и у, процедура не изменила значения фактических параметров а и Ь. Именно это обстоятельство и подвигнуло на придумывание дополнительных методов передачи параметров. |