Механизм передачи параметров

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

Procedure tide (var a : real);

 

Здесь параметр А - параметр-переменная.

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

 

Procedure qwerty(a,b,c:real; var s:real);

 

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

Определение формального параметра тем или иным способом существенно только для вызывающей программы:

- если формальный параметр объявлен как параметр-переменная, то при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной определенного типа;

- если формальный параметр объявлен как параметр-значение, то при вызове ему может соответствовать произвольное выражение.

Контроль за неукоснительным соблюдением этого правила осуществляет компилятором Pascal.

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

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

Если же параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия.

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

*** Параметр-константа схож с параметром-переменной: в подпрограмму передается сама константа, но изменение её невозможно. Назначение такого параметра совпадает с назначением параметра-значения. Формальные параметры- константы указываются в заголовке программы после служебного слова const. Его действие распространяется до ближайшей точки с запятой. Поясним изложенное.

var

с, b: integer;

procedure squar(с: integer; var b: integer);

begin

с:=sqr(c);

b:=sqr(b);

writeln(‘в квадрате они выглядят так: ’,с,’, ’,b);

end;

begin

с:=4; b:=6;

writeln(‘внимательно посмотрите на эти числа: ’, с,’, ’, b);

squar(c,b);

writeln(‘а так – “с” не в квадрате: ’,с, ’, ’,b);

end.

Результаты выглядят так:

внимательно посмотрите на эти числа: 4, 6

в квадрате они выглядят так: 16, 36

а так – “с” не в квадрате: 4, 36

 

Этот пример может служить еще и иллюстрацией механизма «закрывания» глобальной переменной а одноименной локальной: хотя переменная объявлена как глобальная(она описана в вызывающей программе перед описанием процедуры), в теле процедуры ее «закрыла» локальная переменная а, объявленная как параметр-значение.

Итак, параметры-переменные используются как средство связи алгоритма, реализованного в подпрограмме, с «внешним миром»: с помощью этих параметров подпрограмма может передавать результаты своей работы вызывающей программе.








Дата добавления: 2017-11-04; просмотров: 1536;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.