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
- Lire un type corrigé
- Un dépassement qui ne dit rien corrigé
- La taille d'une chaîne corrigé
- Lire une déclaration corrigé
- Problème — Une chaîne sûre corrigé