Menu
Coddy logo textTech

Comparaison de pointeurs

Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 10 sur 63.

Vous avez appris à parcourir des tableaux en utilisant l'arithmétique des pointeurs. Maintenant, vous allez découvrir que les pointeurs peuvent également être comparés en utilisant les mêmes opérateurs relationnels que vous utilisez avec des variables ordinaires : ==, !=, < et >.

Lorsque vous comparez deux pointeurs, vous comparez leurs adresses mémoire. C'est particulièrement utile lorsque les deux pointeurs pointent vers des éléments du même tableau, car cela vous permet de déterminer leurs positions relatives en mémoire.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Pointe vers le premier élément
int *end = numbers + 4;      // Pointe vers le dernier élément

if (start < end) {
    printf("start comes before end in memory");
}

La comparaison de pointeurs devient particulièrement puissante dans les conditions de boucle. Au lieu d'utiliser une variable de compteur, vous pouvez comparer la position actuelle de votre pointeur avec un pointeur cible pour contrôler l'arrêt de la boucle. Cela permet de créer un code élégant et efficace pour le parcours de tableaux.

L'idée clé est que ptr1 < ptr2 vous indique que ptr1 pointe vers un élément qui apparaît plus tôt dans le tableau que l'élément vers lequel ptr2 pointe. Cette relation fait de la comparaison de pointeurs un choix naturel pour contrôler les boucles qui traitent les tableaux de manière séquentielle.

challenge icon

Défi

Facile

Écrivez un programme C qui utilise la comparaison de pointeurs pour parcourir un tableau et trouver des éléments dans une plage spécifique. Votre programme doit :

  1. Déclarer un tableau d'entiers nommé scores avec 8 éléments et l'initialiser avec les valeurs {45, 78, 92, 63, 87, 34, 91, 56}
  2. Déclarer deux pointeurs vers des entiers : start_ptr et end_ptr
  3. Définir start_ptr pour qu'il pointe vers le premier élément du tableau
  4. Définir end_ptr pour qu'il pointe vers le dernier élément du tableau en utilisant l'arithmétique de pointeurs
  5. Déclarer un pointeur nommé current_ptr et l'initialiser pour qu'il pointe vers le premier élément
  6. Utiliser une boucle while avec une comparaison de pointeurs (current_ptr <= end_ptr) pour parcourir le tableau
  7. À l'intérieur de la boucle :
    • Vérifier si la valeur actuelle est comprise entre 60 et 90 (inclus)
    • Si la valeur est dans la plage, afficher "Value %d is in range"
    • Si la valeur n'est pas dans la plage, afficher "Value %d is out of range"
    • Incrémenter current_ptr pour passer à l'élément suivant
  8. Après la boucle, utiliser la comparaison de pointeurs pour vérifier que current_ptr est maintenant au-delà de la fin du tableau en vérifiant si current_ptr > end_ptr
  9. Si la condition est vraie, afficher "Traversal complete"

Votre sortie doit afficher les résultats au format suivant :

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

Ce défi teste votre compréhension des opérateurs de comparaison de pointeurs dans les conditions de boucle, l'utilisation de l'arithmétique de pointeurs pour définir des pointeurs de limite, et comment la comparaison de pointeurs peut contrôler le parcours d'un tableau de manière plus élégante que les boucles traditionnelles basées sur des compteurs.

Aide-mémoire

Les pointeurs peuvent être comparés à l'aide d'opérateurs relationnels : ==, !=, <, et >.

Lors de la comparaison de pointeurs, vous comparez leurs adresses mémoire. Cela est utile pour déterminer les positions relatives des éléments au sein d'un même tableau.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Pointe vers le premier élément
int *end = numbers + 4;      // Pointe vers le dernier élément

if (start < end) {
    printf("start comes before end in memory");
}

La comparaison de pointeurs est particulièrement puissante dans les conditions de boucle, vous permettant de contrôler les boucles en comparant les positions des pointeurs au lieu d'utiliser des variables de compteur :

int *current_ptr = numbers;
int *end_ptr = numbers + 4;

while (current_ptr <= end_ptr) {
    // Traiter l'élément actuel
    current_ptr++;  // Passer à l'élément suivant
}

L'expression ptr1 < ptr2 signifie que ptr1 pointe vers un élément qui apparaît plus tôt dans le tableau que l'élément vers lequel ptr2 pointe.

Essayez vous-même

#include <stdio.h>

int main() {
    // À FAIRE : Écrivez votre code ci-dessous
    
    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