Comme nous l'avons constaté ci-dessus, une fonction n'obtient que les valeurs de ses paramètres.
Pour changer la valeur d'une variable de la fonction appelante,
nous allons procéder comme suit:
- la fonction appelante doit fournir l'adresse de la variable et
- la fonction appelée doit déclarer le paramètre comme pointeur.
On peut alors atteindre la variable à l'aide du pointeur.
Discussion d'un exemple
Nous voulons écrire une fonction PERMUTER qui échange le contenu de deux variables du type int. En première approche, nous écrivons la fonction suivante:
void PERMUTER (int A, int B) { int AIDE; AIDE = A; A = B; B = AIDE; }
Nous appelons la fonction pour deux variables X et Y par:
PERMUTER(X, Y);
Résultat: X et Y restent inchangés !
Explication: Lors de l'appel, les valeurs de X et de Y sont copiées dans les paramètres A et B. PERMUTER échange bien contenu des variables locales A et B, mais les valeurs de X et Y restent les mêmes.
void PERMUTER (int *A, int *B) { int AIDE; AIDE = *A; *A = *B; *B = AIDE; }
Nous appelons la fonction par:
PERMUTER(&X, &Y);
Résultat: Le contenu des variables X et Y est échangé !
Explication: Lors de l'appel, les adresses de X et de Y sont copiées dans les pointeurs A et B. PERMUTER échange ensuite le contenu des adresses indiquées par les pointeurs A et B.