Передача параметров Паскаль

Как проходит передача параметров Паскаль? Передача параметров в языке Паскаль может проходить в два способа: либо по ссылке, либо по значению. Параметры, передаваемые по ссылке, называются параметрами-переменными, а передаваемые по значению — соответственно параметрами-значениями (обычные локальные переменные).

Одно из главных отличий параметров-переменных от параметров значений состоит в том, что в заголовке функции или процедуры перед параметрами-переменными используется ключевое слово var:

Параметры-переменные Паскаль:

procedure empty(n:integer);
var m:integer;
begin
 . . .
end; 

Параметры-значения Паскаль:

procedure pris(var x1,x2: real);
var r: real;
begin
r:= x1;
x1:= x2;
x2:= r;
end;

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

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

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

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


Похожие записи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля отмечены *