13.3. Application des pointeurs au passage en paramètre

Icône de l'outil pédagogique Application des pointeurs au passage en paramètre

Le passage des paramètres par valeur empêche la modification des variables de départ, et une fonction ne peut retourner qu'une seule valeur par l'instruction return. Comment écrire une fonction qui modifie plusieurs variables de la fonction appelante sans que celles‐ci soient définies comme globales ?

L'utilisation des pointeurs permet de répondre à cette question. Une fonction peut modifier autant de variables d’une autre fonction qu'on le désire : il suffit de lui transmettre l'adresse d’une variable à modifier, au lieu de sa valeur. La fonction mémorise cette adresse dans un pointeur et peut alors accéder à la variable par adressage indirect.

Le passage en paramètre par adresse est très utile pour les fonctions d'initialisation, de saisie (scanf en est un bon exemple) et pour toutes les fonctions qui doivent calculer deux résultats ou plus (impossible de les renvoyer par return). Voici un exemple illustrant ce dernier cas.

Exemple 80 : Calcul de DEUX résultats grâce au passage par adresse

La fonction appelante fournit en paramètre l'adresse des variables « à remplir » (&carre, &cube) à l'aide de l'opérateur d'adresse &. La variable a est passée « normalement » par valeur, puisque sa valeur suffit à la fonction (qui ne doit pas modifier a).

La fonction appelée reçoit les adresses dans des pointeurs et utilise l'opérateur d’indirection * pour accéder aux variables par adressage indirect : *ptrCube désigne le contenu de l'adresse placée dans ptrCube et permet de modifier la variable cube par adressage indirect (cube est locale à main, donc inutilisable directement).

 

Figure 13 ‐‐5 : Passage en paramètre par adresse (ici pour calculer deux résultats) 

L'exemple précédent pourrait se résoudre de façon correcte en utilisant deux fonctions au lieu d'une. Mais ce n'est pas toujours possible de se passer de pointeur... Un exemple classique (mais moins utilisé que le cas précédent), où les pointeurs sont indispensables, est celui de la permutation de deux variables à l’aide d’une fonction de permutation :

Exemple 81 : Permutation de variables grâce au passage par adresse

Ce programme affiche:

a=10 et b=20 avant la permutation
a=20 et b=10 apres la permutation