L'opérateur flèche (->)
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 45 sur 63.
Lorsque vous travaillez avec des pointeurs vers des structures, l'accès aux membres de la structure nécessite une syntaxe spéciale. Bien que vous puissiez utiliser l'opérateur de déréférencement et la notation par point ensemble, le langage C fournit un opérateur plus pratique spécifiquement à cet effet : l'opérateur flèche (->).
L'opérateur flèche vous permet d'accéder aux membres d'une structure via un pointeur de manière propre et lisible :
ptr->memberCeci est équivalent à écrire (*ptr).member, mais de manière beaucoup plus concise.
Voici comment cela fonctionne en pratique :
struct Point p1 = {10, 20};
struct Point *ptr = &p1;
// Utilisation de l'opérateur flèche
printf("x = %d, y = %d\n", ptr->x, ptr->y);
// C'est la même chose que :
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);L'opérateur flèche rend votre code plus propre et plus facile à lire, particulièrement lors de la manipulation de structures de données complexes. C'est la méthode standard pour accéder aux membres d'une struct via des pointeurs en programmation C.
Défi
FacileCréez un programme C qui démontre l'utilisation de l'opérateur flèche pour accéder aux membres d'une structure via des pointeurs. Votre programme doit :
- Définir une
structnomméeBookavec les membres suivants :- Un entier
idpour stocker l'identifiant du livre - Un tableau de caractères
titlede taille 40 pour stocker le titre du livre - Un tableau de caractères
authorde taille 30 pour stocker le nom de l'auteur - Un flottant
pricepour stocker le prix du livre - Un entier
pagespour stocker le nombre de pages
- Un entier
- Dans la fonction principale, créer une variable
BooknomméemyBook - Déclarer un pointeur vers une structure
BooknommébookPtr - Assigner l'adresse de
myBookàbookPtr - Lire les valeurs d'entrée suivantes et les assigner aux membres de la structure en utilisant l'opérateur flèche via le pointeur :
- Lire un entier pour l'ID et l'assigner en utilisant
bookPtr->id - Lire une chaîne pour le titre et l'assigner en utilisant
bookPtr->title - Lire une chaîne pour l'auteur et l'assigner en utilisant
bookPtr->author - Lire un flottant pour le prix et l'assigner en utilisant
bookPtr->price - Lire un entier pour les pages et l'assigner en utilisant
bookPtr->pages
- Lire un entier pour l'ID et l'assigner en utilisant
- Après avoir lu toutes les valeurs, effectuer les opérations suivantes en utilisant l'opérateur flèche :
- Appliquer une remise de 10 % au prix :
bookPtr->price = bookPtr->price * 0.9; - Ajouter 50 pages bonus :
bookPtr->pages += 50;
- Appliquer une remise de 10 % au prix :
- Afficher les informations du livre en utilisant l'opérateur flèche pour accéder à chaque membre dans ce format exact :
Book Information:ID: [id]Title: [title]Author: [author]Price: [price]Pages: [pages]
- Calculer et afficher le prix par page en utilisant l'opérateur flèche au format :
Price per page: [price_per_page]
Ce défi teste votre compréhension de l'opérateur flèche pour accéder aux membres d'une structure via des pointeurs. Vous vous entraînerez à utiliser la syntaxe ptr->member pour lire et écrire dans les membres d'une structure, démontrant qu'elle est équivalente à (*ptr).member mais beaucoup plus pratique et lisible.
Aide-mémoire
L'opérateur flèche (->) fournit un moyen pratique d'accéder aux membres d'une structure via un pointeur :
ptr->memberCeci est équivalent à (*ptr).member mais plus concis et lisible.
Exemple d'utilisation :
struct Point p1 = {10, 20};
struct Point *ptr = &p1;
// Utilisation de l'opérateur flèche
printf("x = %d, y = %d\n", ptr->x, ptr->y);
// C'est la même chose que :
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);Essayez vous-même
#include <stdio.h>
#include <string.h>
// TODO: Définir la structure Book ici
int main() {
// TODO: Créer une variable Book nommée myBook
// TODO: Déclarer un pointeur vers Book nommé bookPtr
// TODO: Assigner l'adresse de myBook à bookPtr
// Lire les valeurs d'entrée
int id;
char title[40];
char author[30];
float price;
int pages;
scanf("%d", &id);
scanf("%s", title);
scanf("%s", author);
scanf("%f", &price);
scanf("%d", &pages);
// TODO: Assigner les valeurs d'entrée aux membres de la structure en utilisant l'opérateur flèche
// TODO: Appliquer une remise de 10% au prix en utilisant l'opérateur flèche
// TODO: Ajouter 50 pages bonus en utilisant l'opérateur flèche
// TODO: Afficher les informations du livre en utilisant l'opérateur flèche
// TODO: Calculer et afficher le prix par page en utilisant l'opérateur flèche
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 Logic & Flow
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 fonction8Structures et Pointeurs
Pointeurs vers des structuresL'opérateur flèche (->)Passage de structures par valeurPassage de pointeurs de structuresAllocation dynamique de structuresRécap : Modifier une structure - Ptr3Tableaux 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înes