Pascal - Llamada a subprograma por referencia

los call by referenceEl método de pasar argumentos a un subprograma copia la dirección de un argumento en el parámetro formal. Dentro del subprograma, la dirección se usa para acceder al argumento real usado en la llamada. Esto significa que los cambios realizados en el parámetro afectan el argumento pasado.

Para pasar los argumentos por referencia, Pascal permite definir variable parameters. Esto se hace precediendo los parámetros formales por la palabra clavevar. Tomemos el ejemplo del procedimiento swap () que intercambia los valores en dos variables y refleja el cambio en el subprograma que llama.

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

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

A continuación, llamemos al procedimiento swap () pasandovalues by reference como en el siguiente ejemplo -

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.

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

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

Lo que muestra que ahora el procedimiento swap () tienechanged the values in the calling program.