Passage par valeur
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 1 — Le langage C
Énoncé
Que vaut n après l'appel ? Corriger la fonction pour qu'elle fasse ce que son nom promet.
void doubler(int x) { x = 2 * x; }
int n = 21;
doubler(n);Corrigé
n vaut toujours . L'appel a copié la valeur de n dans le paramètre x ; c'est la copie qui a doublé, et elle disparaît au retour.
Pour modifier la variable de l'appelant, il faut lui passer son adresse :
/* Double la valeur pointée par p. Précondition : p non nul. */
void doubler(int* p) {
assert(p != NULL);
*p = 2 * (*p);
}
int n = 21;
doubler(&n); /* n vaut maintenant 42 */
Le & à l'appel et le * dans le corps vont toujours par paire : l'un fabrique l'adresse, l'autre la suit.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.