Menu
CoddyTech

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.x

Maintenant, 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.

challenge icon

Défi

Facile

Créez un programme C qui montre comment utiliser des pointeurs vers des structures. Votre programme doit :

  1. Définir une struct nommée Product avec les membres suivants :
    • Un entier id pour stocker l’ID du produit
    • Un tableau de caractères name de taille 25 pour stocker le nom du produit
    • Un nombre à virgule flottante price pour stocker le prix du produit
    • Un entier quantity pour stocker la quantité disponible
  2. Dans la fonction principale, créer une variable Product nommée item et l’initialiser avec les valeurs suivantes :
    • ID : 501
    • Nom : "Laptop"
    • Prix : 899.99
    • Quantité : 15
  3. Déclarer un pointeur vers une structure Product nommé itemPtr
  4. Affecter l’adresse de la variable item à itemPtr à l’aide de l’opérateur d’adresse
  5. 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]
  6. 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]
  7. 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;
}
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