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.
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 :
- Déclarer un tableau d’entiers nommé
scoresavec 8 éléments et l’initialiser avec les valeurs {45, 78, 92, 63, 87, 34, 91, 56} - Déclarer deux pointeurs vers des entiers :
start_ptretend_ptr - Définir
start_ptrpour qu’il pointe vers le premier élément du tableau - Définir
end_ptrpour qu’il pointe vers le dernier élément du tableau à l’aide de l’arithmétique des pointeurs - Déclarer un pointeur nommé
current_ptret l’initialiser pour qu’il pointe vers le premier élément - Utiliser une boucle while avec une comparaison de pointeurs (
current_ptr <= end_ptr) pour parcourir le tableau - 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_ptrpour passer à l’élément suivant
- Après la boucle, utiliser la comparaison de pointeurs pour vérifier que
current_ptrse trouve maintenant au-delà de la fin du tableau en vérifiant sicurrent_ptr > end_ptr - 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 completeCe 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;
}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
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînesEntraînez-vous par vous-même : Compilateur C en ligne