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

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

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

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

· Параметры-переменные;

· Параметры-константы.

 

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: