Pascal - Chamada de Subprograma por Referência

o call by referenceO método de passagem de argumentos para um subprograma copia o endereço de um argumento no parâmetro formal. Dentro do subprograma, o endereço é usado para acessar o argumento real usado na chamada. Isso significa que as alterações feitas no parâmetro afetam o argumento passado.

Para passar os argumentos por referência, Pascal permite definir variable parameters. Isso é feito precedendo os parâmetros formais pela palavra-chavevar. Tomemos o exemplo do procedimento swap () que troca os valores em duas variáveis ​​e reflete a mudança no subprograma de chamada.

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

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

Em seguida, vamos chamar o procedimento swap () passandovalues by reference como no exemplo a seguir -

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.

Quando o código acima é compilado e executado, ele produz o seguinte 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

O que mostra que agora o procedimento swap () temchanged the values in the calling program.