Leçon 43 : Pointeurs vers des structures (L'opérateur ->)
Les structures sont souvent transmises aux fonctions à l'aide de pointeurs pour économiser de la mémoire et permettre des modifications (Passage par référence).
Déclarer un pointeur vers une structure
c struct Personne { char nom[30]; int age; };
struct Personne p1 = {"Jean", 45}; struct Personne *ptr_p1; // Déclare un pointeur vers une structure Personne
ptr_p1 = &p1; // Assigne l'adresse de p1 au pointeur
Accès aux membres via un pointeur
Il existe deux façons équivalentes d'accéder à un membre de structure via un pointeur :
1. Déréférencement et opérateur point
On déréférence d'abord le pointeur, puis on utilise l'opérateur point.
c (*ptr_p1).age = 46; printf("Age : %d\n", (*ptr_p1).age);
2. L'opérateur flèche (->)
Le C propose un raccourci, l'opérateur flèche (->), qui est généralement plus clair et préféré.
c ptr_p1->age = 47; // Équivalent à (*ptr_p1).age = 47 printf("Nom : %s\n", ptr_p1->nom);
Allocation dynamique de structures
Les structures peuvent être allouées sur le tas en utilisant malloc() ou calloc(), ce qui renvoie toujours un pointeur vers la structure.
c struct Personne *nouvelle_p = (struct Personne *) malloc(sizeof(struct Personne));
if (nouvelle_p != NULL) { nouvelle_p->age = 25; // N'oubliez pas de libérer plus tard ! free(nouvelle_p); }