Механизм передачи параметров
По способу передачи данных параметры можно разделить на несколько категорий. Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой. Если параметры определяются как параметры-переменные, перед ними необходимо ставить зарезервированное слово 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; просмотров: 1601;