Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С_испр_обработка_массивов_new.doc
Скачиваний:
25
Добавлен:
14.08.2019
Размер:
2.49 Mб
Скачать

Формальные и фактические параметры

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

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

Наборы фактических и формальных параметров должны соответствовать друг другу:

  1. по количеству;

  2. по типу;

  3. по порядку следования;

  4. по способу передачи.

Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее. Но, тем не менее, рекомендуется давать формальным и фактическим параметрам разные имена для лучшего понимания алгоритма работы программы при многократном вызове подпрограмм с различными наборами фактических параметров.

Способы передачи параметров в подпрограммы

В языке программирования Turbo Pascal существует несколько способов передачи параметров в подпрограммы. Выбор способа передачи зависит от того, являются ли предаваемые значения входными или выходными параметрами.

Различают передачу параметров:

  1. по значению;

  2. по ссылке;

По значению в подпрограмму передают те значения фактических параметров, которые являются входными данными для подпрограммы и при этом являются простыми значениями. Такие параметры считаются параметрами-значениями.

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

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

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

По ссылке передаются два вида параметров: параметры-константы и параметры-переменные.

Параметры-константы используются, когда входными данными являются сложные структурированные переменные (например, массивы). Если передавать такие параметры по значению, то используется слишком много памяти из-за дублирования данных (хотя операция копирования выполняется быстрее, чем передача адреса). Нужно помнить о том, что изменение формального параметра-константы в подпрограмме запрещено (это контролирует компилятор). Параметр-константа в списке формальных параметров предваряется ключевым словом Const (от англ. Constant - постоянная).

Параметры-переменные используются для передачи выходных значений подпрограмм-процедур, т.к. в этом случае изменение формального параметра-переменной приводит к изменению соответствующего фактического параметра. Параметр-переменная в списке формальных параметров предваряется ключевым словом Var (от англ. Variable - переменная). Передача параметра-переменной – это достаточно опасный способ передачи данных, т.к. любая ошибка программиста может привести к искажению данных.

Замечание. Переменные файлового типа всегда передаются как параметры-переменные.

При передаче по ссылке в качестве фактических параметров можно использовать только переменные.