Passage par adresse des paramètres
On peut aussi implémenter des procédures qui changent la valeur originale des
variables prises en argument par la procédure. Afin d'illustrer cette
possibilité, nous allons développer une petite procédure, que nous nommerons
swap, qui prend comme arguments deux entiers et qui les échange.
Les procédures précédentes, qui acceptaient des valeurs comme arguments, ne pouvaient effectuer cette opération car elles ne travaillaient qu'avec une copie des variables originales. Afin de permettre à la procédure de modifier la valeur originale des arguments (c'est-à-dire d'accepter le passage de paramètres par adresse), on fait précéder la déclaration des paramètres (entre parenthèse derrière le nom de la fonction) par le mot-clé var.
La variable originale est par conséquent utilisée et non plus une copie de celle-ci.
program Variable_Parameters (output);
procedure SWAP ( var value1, value2 : integer );
var temp : integer;
begin
temp := value1;
value1 := value2; {value1 is actually number1}
value2 := temp {value2 is actually number2}
end;
var number1, number2 : integer;
begin
number1 := 10;
number2 := 33;
writeln( 'Number1 = ', number1,' Number2 = ', number2 );
SWAP( number1, number2 );
writeln( 'Number1 = ', number1,' Number2 = ', number2 )
end.
Lors de son exécution, ce programme affiche:
Number1 = 10 Number2 = 33 Number1 = 33 Number2 = 10
procedure Wrong ( A : integer; var B : integer ); var A : integer; B : real;Cliquez ici pour obtenir la réponse