Pascal - 通过引用调用子程序


参数传递给子程序的引用调用方法将参数的地址复制到形式参数中。在子程序内部,该地址用于访问调用中使用的实际参数。这意味着对参数所做的更改会影响传递的参数。

为了通过引用传递参数,Pascal 允许定义可变参数。这是通过在形式参数前面加上关键字var来完成的。让我们以过程swap()为例,它交换两个变量中的值并反映调用子程序中的更改。

procedure swap(var x, y: integer);
var
   temp: integer;

begin
   temp := x;
   x:= y;
   y := temp;
end;

接下来,让我们通过引用传递值来调用过程swap(),如下例所示 -

program exCallbyRef;
var
   a, b : integer;
(*procedure definition *)
procedure swap(var x, y: integer);

var
   temp: integer;

begin
   temp := x;
   x:= y;
   y := temp;
end;

begin
   a := 100;
   b := 200;
   writeln('Before swap, value of a : ', a );
   writeln('Before swap, value of b : ', b );
   
   (* calling the procedure swap  by value   *)
   swap(a, b);
   writeln('After swap, value of a : ', a );
   writeln('After swap, value of b : ', b );
end.

当上面的代码被编译并执行时,它会产生以下结果 -

Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100

这表明现在过程swap()已经更改了调用程序中的值

pascal_procedures.htm