Menu
CoddyTech

Comparaison de pointeurs

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

Tu as appris à parcourir des tableaux à l’aide de l’arithmétique des pointeurs. Tu vas maintenant découvrir que les pointeurs peuvent aussi être comparés à l’aide des mêmes opérateurs relationnels que ceux que tu utilises avec les variables ordinaires : ==, !=, < et >.

Lorsque vous comparez deux pointeurs, vous comparez leurs adresses mémoire. Cela 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, tu peux comparer la position actuelle de ton pointeur à un pointeur cible pour déterminer quand la boucle doit s’arrêter. Cela permet d’écrire du code élégant et efficace pour parcourir un tableau.

L’idée essentielle 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 pointe ptr2. 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 les éléments compris 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 à l’aide de l’arithmétique des 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. Dans la boucle :
    • Vérifier si la valeur courante est comprise entre 60 et 90 (inclus)
    • Si la valeur est dans la plage, afficher exactement Value [value] is in range
    • Si la valeur n’est pas dans la plage, afficher exactement Value [value] 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 se trouve maintenant au-delà de la fin du tableau en vérifiant si current_ptr > end_ptr
  9. Si la condition est vraie, afficher exactement 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, de l’utilisation de l’arithmétique des pointeurs pour définir les pointeurs de limite et de la façon dont 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 un compteur.

Essayez vous-même

#include <stdio.h>

int main() {
    // TODO: É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 Logique & Flux

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