Les fonctions
CHAPITRE 8
152
2.4 Nature des paramètres effectifs
Nous avions déjà vu qu’avec la transmission par valeur (utilisée par défaut), les paramètres
effectifs pouvaient prendre la forme de n’importe quelle expression. Ainsi, dans l’exemple
du paragraphe 1.2, page 141, nous appelions la fonction sous cette forme :
affiche (n)
// transmet la valeur de n
mais nous aurions pu également l’appeler ainsi :
affiche (3)
// transmet la valeur 3
ou encore ainsi :
affiche (2*n + 5)
// transmet la valeur de l’expression 2*n + 5
En revanche, cette « liberté » n’existe plus lorsqu’un paramètre est transmis par référence. En
effet, vouloir transmettre l’adresse d’une constante ou celle d’une expression, en vue d’en
modifier éventuellement la valeur n’a pas sens ! D’où la règle :
Remarque
Certains langages font une entorse à cette règle, notamment dans le cas des constantes. En
fait, ces langages se contentent d’effectuer une copie de la constante dans un emplacement
temporaire dont ils fournissent l’adresse à la fonction. Les modifications éventuelles sont
alors effectuées sur cette copie et elles n’ont, heureusement, aucune incidence sur la
constante d’origine. La même démarche peut être employée pour des valeurs d’expression.
2.5 Un autre exemple de transmission par référence
Au paragraphe 1.6, page 146, nous vous avons présenté un programme déterminant le maximum de deux valeurs. Voici un autre programme effectuant une tâche similaire mais, cette
fois, la valeur du maximum est placée dans une variable fournie (par référence) lors de
l’appel au lieu d’être fournie en résultat.
entier n := 5, p := 9
entier m
// pour recevoir le maximum de n et p
max (n, p, m)
// place dans m le maximum de n et p
fonction max (entier a, entier b, référence entier m)
{ si a > b alors m := a
sinon m := b
}
On notera bien qu’ici seul le troisième paramètre est soumis à la transmission par référence.
Les paramètres effectifs transmis par référence ne peuvent pas être des constantes ou des expressions. Il ne peut s’agir que des variables.
CHAPITRE 8
152
2.4 Nature des paramètres effectifs
Nous avions déjà vu qu’avec la transmission par valeur (utilisée par défaut), les paramètres
effectifs pouvaient prendre la forme de n’importe quelle expression. Ainsi, dans l’exemple
du paragraphe 1.2, page 141, nous appelions la fonction sous cette forme :
affiche (n)
// transmet la valeur de n
mais nous aurions pu également l’appeler ainsi :
affiche (3)
// transmet la valeur 3
ou encore ainsi :
affiche (2*n + 5)
// transmet la valeur de l’expression 2*n + 5
En revanche, cette « liberté » n’existe plus lorsqu’un paramètre est transmis par référence. En
effet, vouloir transmettre l’adresse d’une constante ou celle d’une expression, en vue d’en
modifier éventuellement la valeur n’a pas sens ! D’où la règle :
Remarque
Certains langages font une entorse à cette règle, notamment dans le cas des constantes. En
fait, ces langages se contentent d’effectuer une copie de la constante dans un emplacement
temporaire dont ils fournissent l’adresse à la fonction. Les modifications éventuelles sont
alors effectuées sur cette copie et elles n’ont, heureusement, aucune incidence sur la
constante d’origine. La même démarche peut être employée pour des valeurs d’expression.
2.5 Un autre exemple de transmission par référence
Au paragraphe 1.6, page 146, nous vous avons présenté un programme déterminant le maximum de deux valeurs. Voici un autre programme effectuant une tâche similaire mais, cette
fois, la valeur du maximum est placée dans une variable fournie (par référence) lors de
l’appel au lieu d’être fournie en résultat.
entier n := 5, p := 9
entier m
// pour recevoir le maximum de n et p
max (n, p, m)
// place dans m le maximum de n et p
fonction max (entier a, entier b, référence entier m)
{ si a > b alors m := a
sinon m := b
}
On notera bien qu’ici seul le troisième paramètre est soumis à la transmission par référence.
Les paramètres effectifs transmis par référence ne peuvent pas être des constantes ou des expressions. Il ne peut s’agir que des variables.
