Билет14 Способы передачи параметров

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

2. для результата - память для переменной выделяется, но туда ничего не записывается, по окнончанию работы подпрограммы происходит запись из нее в фактический параметр (используется для передачи выходных параметров, т.е. результата).

3. значение-результат - используются оба механизма (может использоваться для входных, входно-выходных и выходных параметров, но может возникнуть побочный эффект).

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

5. Текст, макроподстановка – везде, где встречается обработка формального параметра происходит автоматическая замена формального параметра на текст фактического. При этом в зависимости от текста фактического параметра не всегда может произойти корректная работа компилятора. Пример: пусть xзаменяется на a+b, тогда выражение вида x:=x+1 заменяется на выражение a+b:=a+b+1, а это ошибка, т.к. не понятно значение какой переменной необходимо менять.

В Паскале реализованы не все из указанных выше способов передачи параметров. В этом языке программирования способ передачи определяется по описанию заголовка подпрограммы. Если перед именем переменной следует зарезервированное слово var, то считается, что переменная передается по ссылке, а если этого слова нет - то по значению.