procedure practice_by_value(x,y,z : integer);
Dans passe par la valeur - x, y, z sont des variables distinctes de A [1], n, A [2], mais ne reçoivent qu'une copie des valeurs qui étaient dans le correspondant A [1], n, A [2]. Comme ce sont des variables séparées, comme vous le dites, les variables de l'appelant, A [1], n, A [2] sont inchangées si des modifications sont apportées à x, y ou z.
procedure practice_by_reference(var x,y,z : integer);
Avec référence passe par - x, y, z devenir des pseudonymes ou des alias pour A [1], n, A [2]. Toutes les opérations sur x, y, z sont les mêmes que si cette opération avait été effectuée sur A [1], n ou A [2]. Donc, si vous modifiez x, y, z dans la procédure, vous modifiez réellement A [1], n, A [2] dans l'appelant. Je ne suis pas familier avec «passer par le nom» en Pascal.
var
A : array[1.. 10] of integer;
n :integer;
procedure practice_by_value (x,y,z : integer);
begin
y := 1;
z := y-x;
end; { practice_by_value }
procedure practice_by_reference(var x,y,z : integer);
begin
y := 1;
z := y-x;
end;
begin
A[1] := 1;
A[2] := 2;
n := 2;
practice_by_value (A[1], n, A[n]);
writeln('after pass by value: ',A[1],' ',n,' ',A[2]);
practice_by_reference(A[1],n,A[n]);
writeln('after pass by reference : ',A[1],' ',n,' ',A[2]);
end.
after pass by value: 1 2 2
after pass by reference: 1 1 0
Où avez-vous entendu parler de "pass by name"? Je le vois seulement utilisé par rapport à Algol, une très vieille langue qui pourrait ne plus être utilisée. – Scooter
@Scooter Pascal vient d'Algol alors votre question est sur le point. –