Menu
Coddy logo textTech

Pointeurs vers des structures

Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 44 sur 63.

Maintenant que vous êtes à l'aise avec les structures, il est temps de les combiner avec un autre concept puissant du C : les pointeurs. Tout comme vous pouvez créer des pointeurs vers des types de données de base comme int ou char, vous pouvez également créer des pointeurs qui contiennent l'adresse d'une variable de type struct.

La syntaxe pour déclarer un pointeur vers une structure suit le même modèle que 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;

Ceci 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;

Maintenant, ptr contient l'adresse mémoire de la variable struct p1. Cela ouvre de nouvelles possibilités pour travailler avec des structures, en particulier lors de leur passage à des fonctions ou de la gestion dynamique de la mémoire. Les pointeurs vers des structures sont essentiels pour construire des structures de données plus complexes et écrire des programmes C efficaces.

challenge icon

Défi

Facile

Créez un programme C qui démontre l'utilisation de 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 flottant 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. Assigner l'adresse de la variable item à itemPtr en utilisant l'opérateur d'adresse
  5. Afficher les informations originales du produit en accédant directement aux membres de la structure (en utilisant 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 via le pointeur (en utilisant l'opérateur de déréférencement et 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, affichez 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 de pointeur vers une structure, de l'assignation d'adresse à l'aide de l'opérateur d'adresse et de l'accès aux membres d'une structure via des pointeurs en utilisant 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.

Aide-mémoire

Vous pouvez créer des pointeurs vers des structures en utilisant la même syntaxe que pour les autres déclarations de pointeurs :

struct StructureName *pointerName;

Pour faire pointer un pointeur vers une variable de structure, utilisez l'opérateur d'adresse :

struct Point p1 = {10, 20};
struct Point *ptr;
ptr = &p1;

Accédez aux membres de la structure via un pointeur en utilisant l'opérateur de déréférencement et la notation par point :

(*ptr).member

Essayez vous-même

#include <stdio.h>
#include <string.h>

// À FAIRE : Définir la structure Product ici

int main() {
    // À FAIRE : Écrivez votre code ici
    // 1. Créer et initialiser la variable Product 'item'
    // 2. Déclarer un pointeur vers Product nommé 'itemPtr'
    // 3. Assigner l'adresse de 'item' à 'itemPtr'
    // 4. Afficher les informations originales du produit en utilisant l'opérateur point
    // 5. Afficher les informations du produit via le pointeur en utilisant (*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 Logic & Flow