Terminons ce paragraphe par un exemple un peu plus compliqué. Considérons la procédure Param définie par:
PROCEDURE Param ( <mode de transmission> A, I: Integer );
BEGIN
I := I+1;
A := A+2
END; {-- Param}
Supposons que la procédure Param est appelée dans le texte suivant:
. . .
VAR T: ARRAY [1..2] OF Integer;
K: Integer;
. . .
BEGIN
. . .
K := 1;
T[1] := 2;
T[2] := 3;
Param( T[K], K );
Writeln( T[1], T[2] );
. . .
END;
Discutons l'effet-net de la procédure Param en fonction des différents modes de transmision des paramètres.
Figure 11.18 Transmission par valeur
Les paramètres formels prennent les valeurs des paramètres effectifs. Au retour dans le (sous-) programme appelant, les paramètres effectifs gardent leur valeur initiale.
On obtient le schéma suivant:
Figure 11.19 Transmission par référence
Les arguments formels adressent la même cellule-mémoire que les paramètres actuels correspondants pendant tout le cours de l'exécution du sous-programme. Soit ici:
A identifie la même cellule-mémoire que T[1],
I identifie la même cellule-mémoire que K.
Il est facile à voir qu'ici l'état des variables du (sous-) programme appelant est modifié par simple exécution de la procédure Param. Rappelons encore une fois que ce mode de transmission des paramètres peut conduire à des effets de bord [angl. side effects] non souhaités.
On obtient le schéma ci-dessous:
Figure 11.20 Transmission par nom
Rappelons que lors du passage des paramètres par nom, les paramètres formels sont substitués par le texte, c'est-à-dire la chaîne de caractères, qui définit les paramètres effectifs correspondants.
Donc, le bloc de la procédure appelée est exE9cuté dans la version suivante:
K := K+1;
T[K] := T[K]+2;
© Aflo Informatique , 2003-2004