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.