Mode de transmission des paramètres
151
né, lors de l’écriture de l’en-tête de la fonction. Ainsi, en utilisant pour échange l’en-tête
suivant :
échange (référence entier a, référence entier b)
nous indiquerons que les deux paramètres muets a et b seront soumis à ce mode de transmission par référence.
Lors de l’appel (dont l’écriture restera inchangée) :
echange (n, p)
ce seront les adresses de n et p (et non plus leurs valeurs) qui seront communiquées à la fonction. Lors de l’exécution de la fonction, les symboles a et n désigneront en fait le même
emplacement ; il en ira de même pour b et p.
Voici une adaptation du programme précédent utilisant cette nouvelle fonction échange :
entier n := 10, p := 20
écrire «avant appel : », n, p
echange (n, p)
écrire «après appel : », n, p
fonction echange (référence entier a, référence entier b)
{ entier c
écrire «début échange : », a, b
c := a // ici, a désigne le premier paramètre effectif, non une valeur locale
a := b // ici, b désigne le second paramètre effectif, non une valeur locale
b := c
écrire «fin échange : », a, b
}
avant appel : 10 20
début échange : 10 20
fin échange : 20 10
après appel : 20 10
Conséquences de la transmission par référence
Cette fois, on voit clairement que les valeurs des paramètres effectifs n et p ont bien été
échangées.
Remarque
Avec nos conventions, ce n’est que dans l’en-tête de la fonction qu’on détermine quel est le
mode de transmission d’un paramètre. Dans le corps de la fonction, les instructions restent
les mêmes avec des conséquences différentes. Il en va de même dans l’appel de la fonction
où rien ne précise alors quel sera le mode de transmission utilisé. Cette difficulté de
« perception » du rôle exact d’une fonction se retrouve dans la plupart des langages disposant
de la transmission par référence.
151
né, lors de l’écriture de l’en-tête de la fonction. Ainsi, en utilisant pour échange l’en-tête
suivant :
échange (référence entier a, référence entier b)
nous indiquerons que les deux paramètres muets a et b seront soumis à ce mode de transmission par référence.
Lors de l’appel (dont l’écriture restera inchangée) :
echange (n, p)
ce seront les adresses de n et p (et non plus leurs valeurs) qui seront communiquées à la fonction. Lors de l’exécution de la fonction, les symboles a et n désigneront en fait le même
emplacement ; il en ira de même pour b et p.
Voici une adaptation du programme précédent utilisant cette nouvelle fonction échange :
entier n := 10, p := 20
écrire «avant appel : », n, p
echange (n, p)
écrire «après appel : », n, p
fonction echange (référence entier a, référence entier b)
{ entier c
écrire «début échange : », a, b
c := a // ici, a désigne le premier paramètre effectif, non une valeur locale
a := b // ici, b désigne le second paramètre effectif, non une valeur locale
b := c
écrire «fin échange : », a, b
}
avant appel : 10 20
début échange : 10 20
fin échange : 20 10
après appel : 20 10
Conséquences de la transmission par référence
Cette fois, on voit clairement que les valeurs des paramètres effectifs n et p ont bien été
échangées.
Remarque
Avec nos conventions, ce n’est que dans l’en-tête de la fonction qu’on détermine quel est le
mode de transmission d’un paramètre. Dans le corps de la fonction, les instructions restent
les mêmes avec des conséquences différentes. Il en va de même dans l’appel de la fonction
où rien ne précise alors quel sera le mode de transmission utilisé. Cette difficulté de
« perception » du rôle exact d’une fonction se retrouve dans la plupart des langages disposant
de la transmission par référence.
