Rappel : manipulation des pointeurs
Contexte scénarisé
En C | Rôle | Métaphore |
|---|---|---|
pointeur :
| contenant | verre |
variable : contient une valeur | contenu | boisson |
Je vais prendre un verre en terrasse avec un ami au bar « Avec Modération »
- Comme nous sommes tous deux un peu hypocondriaques, on ramène nos propres verres
J'ai mon verre de festival favori :
int *verre_ross;
Mon ami Bob a son propre verre de festival également :int *verre_bob;
- Nous commandons des bières
Un demi de blonde pour moi :
int biere_blonde = 250;
Et une pinte sans alcool pour Bob :int biere_sans_alcool = 500;
- Catastrophe : Le barman se trompe et verse nos bières dans les mauvais verres.
Moi, Ross, j'ai reçu la bière sans alcool dans mon verre :verre_ross = &biere_sans_alcool;
Bob a le demi de blonde dans son verre :verre_bob = &biere_blonde;
- Je demande donc au barman de corriger l’erreur.
Il échange le contenu de nos verresvoid swap(int *verre_1, int *verre_2);Plutôt que de transvaser directement les bières d'un verre à l'autre (il ne peut pas, ça va déborder), le barman décide de faire une manipulation avec un troisième verre :
int *verre_vide; int vide = 0; verre_vide = &vide;Il échange le contenu des verres via ce troisième verre vide temporaire :
*verre_vide = *verre_1; *verre_1 = *verre_2; *verre_2 = *verre_vide;
Grâce à ce processus, nos verres contiennent finalement la bonne boisson : Bob a sa bière sans alcool et moi, mon demi de blonde.