Menu
Coddy logo textTech

Un exemple classique : Swap

Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 28 sur 63.

La fonction swap est l’un des exemples les plus célèbres qui démontrent pourquoi les pointeurs sont essentiels en programmation C. L’objectif est simple : écrire une fonction qui échange les valeurs de deux variables. Cependant, cette tâche apparemment simple révèle une limitation fondamentale du passage par valeur.

Considérez ce qui se passe si vous essayez d'échanger deux variables en utilisant le passage par valeur classique :

void badSwap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    // Cela n'échange que les copies, pas les variables d'origine !
}

Cette approche échoue car la fonction ne reçoit que des copies des valeurs. Les variables originales dans la fonction appelante restent inchangées.

La solution nécessite de passer des pointeurs vers les variables à la place :

void swap(int *a, int *b) {
    int temp = *a;  // Stocke la valeur à l'adresse a
    *a = *b;        // Place la valeur de l'adresse b dans l'adresse a
    *b = temp;      // Place la valeur stockée dans l'adresse b
}

En transmettant les adresses des variables et en utilisant l’opérateur de déréférencement, la fonction peut modifier directement les valeurs des variables d’origine. Cela fait de la fonction d’échange une parfaite démonstration des situations où et des raisons pour lesquelles vous avez besoin de pointeurs pour accomplir des tâches que le passage par valeur ne peut tout simplement pas gérer.

challenge icon

Défi

Facile

Écrivez un programme C qui implémente et démontre la fonction classique d’échange à l’aide de pointeurs. Votre programme doit :

  1. Créer une fonction nommée swap qui prend deux pointeurs vers des entiers comme paramètres
  2. À l’intérieur de la fonction swap, échanger les valeurs aux adresses mémoire pointées par les deux pointeurs à l’aide d’une variable temporaire
  3. Dans la fonction main, lire deux entiers saisis par l’utilisateur
  4. Afficher les valeurs d’origine au format suivant : Before swap: a = [value], b = [value]
  5. Appeler la fonction swap et transmettre les adresses des deux variables à l’aide de l’opérateur d’adresse
  6. Après l’appel de la fonction, afficher les valeurs échangées au format suivant : After swap: a = [value], b = [value]

Votre résultat doit démontrer que la fonction échange correctement les valeurs des variables d’origine :

Before swap: a = [first_input], b = [second_input]
After swap: a = [second_input], b = [first_input]

Ce défi montre pourquoi les pointeurs sont essentiels pour l’opération d’échange : la fonction doit accéder aux emplacements mémoire des variables d’origine afin d’échanger définitivement leurs valeurs, ce qui est impossible avec un passage par valeur.

Essayez vous-même

#include <stdio.h>

// À FAIRE : Écrivez votre fonction d'échange ici

int main() {
    int a, b;
    
    // Lire l'entrée
    scanf("%d", &a);
    scanf("%d", &b);
    
    // Afficher les valeurs originales
    printf("Before swap: a = %d, b = %d\n", a, b);
    
    // À FAIRE : Appelez votre fonction d'échange ici
    
    // Afficher les valeurs échangées
    printf("After swap: a = %d, b = %d\n", a, b);
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur C en ligne