Adloun

informatique (MP2I/MPI) · Chapitre 1 · Application directe du cours

Passage par valeur

Le langage C · niveau 2

É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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre