Programmation bas niveau (BNV) Help

Rappel : manipulation des pointeurs

Contexte scénarisé

En C

Rôle

Métaphore

pointeur :

  • variable qui contient l'adresse d'une autre variable

  • qui pointe vers une autre variable

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 verres

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

Transformation du scénario en code C :

#include <stdio.h> #include <stdlib.h> void swap(int *verre_1, int *verre_2) { int *verre_vide; int vide = 0; verre_vide = &vide; *verre_vide = *verre_1; *verre_1 = *verre_2; *verre_2 = *verre_vide; } int main() { int *verre_ross; int *verre_bob; int biere_blonde = 250; int biere_sans_alcool = 500; //1. Initialisation des pointeurs avec les adresses des variables verre_ross = &biere_sans_alcool; verre_bob = &biere_blonde; //2. Affichage des valeurs avant l'échange printf("Avant l'échange : \n"); printf("Bière dans le verre de Bob: %d\n", *verre_bob); printf("Bière dans le verre de Ross: %d\n", *verre_ross); //3. Échange du contenu des pointeurs swap(verre_ross, verre_bob); //4. Affichage des valeurs après l'échange printf("\nAprès l'échange : \n"); printf("Bière dans le verre de Bob: %d\n", *verre_bob); printf("Bière dans le verre de Ross: %d\n", *verre_ross); exit(0); }
17 October 2025