Pointeurs vers des structures
Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 44 sur 63.
Maintenant que tu es à l’aise avec les structures, il est temps de les combiner avec un autre concept puissant du C : les pointeurs. Tout comme tu peux créer des pointeurs vers des types de données de base comme int ou char, tu peux aussi créer des pointeurs qui contiennent l’adresse d’une variable de type structure.
La syntaxe pour déclarer un pointeur vers une structure suit le même modèle que pour les autres déclarations de pointeurs :
struct StructureName *pointerName;Par exemple, en utilisant notre structure Point familière :
struct Point p1 = {10, 20};
struct Point *ptr;Cela crée un pointeur nommé ptr qui peut stocker l’adresse d’une structure Point. Pour que le pointeur pointe effectivement vers notre variable de structure, vous utilisez l’opérateur d’adresse :
ptr = &p1;Pour accéder à un membre via le pointeur, déréférencez-le puis utilisez l’opérateur point. Les parenthèses sont nécessaires, car . a une priorité plus élevée que * :
printf("%d", (*ptr).x); // équivalent à p1.xMaintenant, ptr contient l’adresse mémoire de la variable struct p1. Cela ouvre de nouvelles possibilités pour travailler avec les structs, en particulier lorsqu’on les passe à des fonctions ou qu’on gère la mémoire de manière dynamique. Les pointeurs vers des structs sont essentiels pour créer des structures de données plus complexes et écrire des programmes C efficaces.
Défi
FacileCréez un programme C qui montre comment utiliser des pointeurs vers des structures. Votre programme doit :
- Définir une
structnomméeProductavec les membres suivants :- Un entier
idpour stocker l’ID du produit - Un tableau de caractères
namede taille 25 pour stocker le nom du produit - Un nombre à virgule flottante
pricepour stocker le prix du produit - Un entier
quantitypour stocker la quantité disponible
- Un entier
- Dans la fonction principale, créer une variable
Productnomméeitemet l’initialiser avec les valeurs suivantes :- ID : 501
- Nom : "Laptop"
- Prix : 899.99
- Quantité : 15
- Déclarer un pointeur vers une structure
ProductnomméitemPtr - Affecter l’adresse de la variable
itemàitemPtrà l’aide de l’opérateur d’adresse - Afficher les informations originales du produit en accédant directement aux membres de la structure (à l’aide de l’opérateur point), dans ce format exact :
Original Product Info:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Afficher les mêmes informations du produit en accédant aux membres de la structure par le pointeur (à l’aide de l’opérateur de déréférencement et de la notation point :
(*itemPtr).member), dans ce format exact :Product Info via Pointer:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Vérifier que le pointeur pointe correctement vers la structure en affichant les adresses mémoire dans ce format exact :
Address of item: [address]Value of itemPtr: [address]Address verification: [result]
Pour la vérification de l’adresse, afficher Match si les adresses sont identiques, ou No Match si elles sont différentes.
Ce défi teste votre compréhension de la déclaration d’un pointeur vers une structure, de l’affectation d’une adresse à l’aide de l’opérateur d’adresse et de l’accès aux membres d’une structure par des pointeurs à l’aide de l’opérateur de déréférencement combiné à la notation point. Vous vérifierez également que le pointeur contient correctement l’adresse de la variable de structure.
Essayez vous-même
#include <stdio.h>
#include <string.h>
// TODO: Définir la structure Product ici
int main() {
// TODO: Écrire votre code ici
// 1. Créer et initialiser la variable Product 'item'
// 2. Déclarer un pointeur vers Product nommé 'itemPtr'
// 3. Affecter l’adresse de 'item' à 'itemPtr'
// 4. Afficher les informations du produit d’origine à l’aide de l’opérateur point
// 5. Afficher les informations du produit via le pointeur à l’aide de (*itemPtr).member
// 6. Afficher et vérifier les adresses
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 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înesEntraînez-vous par vous-même : Compilateur C en ligne