Menu
Coddy logo textTech

Un exemple classique : Swap

Fait partie de la section Logic & Flow 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émontre pourquoi les pointeurs sont essentiels dans la programmation en 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 passant 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 swap une démonstration parfaite de quand et pourquoi 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 en C qui implémente et démontre la fonction classique d'échange (swap) en utilisant des pointeurs. Votre programme doit :

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

Votre sortie doit démontrer que la fonction échange avec succès 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 dé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 pour échanger leurs valeurs de manière permanente, ce qui est impossible avec le passage par valeur.

Aide-mémoire

La fonction swap démontre pourquoi les pointeurs sont essentiels en C. Le passage par valeur ne peut pas échanger les variables originales car les fonctions ne reçoivent que des copies :

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

L'approche correcte utilise des pointeurs pour accéder aux variables originales et les modifier :

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

En passant des adresses et en utilisant l'opérateur de déréférencement (*), la fonction peut modifier directement les valeurs des variables originales.

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 Logic & Flow