Adloun

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.