Dans ce didacticiel, vous apprendrez à utiliser des pointeurs pour accéder aux membres de structures en programmation C. Vous apprendrez également à allouer dynamiquement la mémoire des types de structure.
Avant d'apprendre comment les pointeurs peuvent être utilisés avec des structures, assurez-vous de consulter ces didacticiels:
- Pointeurs C
- C struct
C pointeurs vers struct
Voici comment créer des pointeurs vers des structures.
struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )
Ici, ptr est un pointeur vers struct
.
Exemple: accéder aux membres à l'aide du pointeur
Pour accéder aux membres d'une structure à l'aide de pointeurs, nous utilisons l' ->
opérateur.
#include struct person ( int age; float weight; ); int main() ( struct person *personPtr, person1; personPtr = &person1; printf("Enter age: "); scanf("%d", &personPtr->age); printf("Enter weight: "); scanf("%f", &personPtr->weight); printf("Displaying:"); printf("Age: %d", personPtr->age); printf("weight: %f", personPtr->weight); return 0; )
Dans cet exemple, l'adresse de person1 est stockée dans le pointeur personPtr à l'aide de personPtr = &person1;
.
Maintenant, vous pouvez accéder aux membres de person1 à l'aide du personPtr
pointeur.
Au fait,
personPtr->age
est équivalent à(*personPtr).age
personPtr->weight
est équivalent à(*personPtr).weight
Allocation de mémoire dynamique des structures
Avant de poursuivre cette section, nous vous recommandons de vérifier l'allocation de mémoire dynamique C.
Parfois, le nombre de variables struct que vous avez déclaré peut être insuffisant. Vous devrez peut-être allouer de la mémoire pendant l'exécution. Voici comment vous pouvez y parvenir en programmation C.
Exemple: allocation de mémoire dynamique de structures
#include #include struct person ( int age; float weight; char name(30); ); int main() ( struct person *ptr; int i, n; printf("Enter the number of persons: "); scanf("%d", &n); // allocating memory for n numbers of struct person ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i name and ptr->age is used // To access members of 2nd struct person, // (ptr+1)->name and (ptr+1)->age is used scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); ) printf("Displaying Information:"); for(i = 0; i name, (ptr+i)->age); return 0; )
Lorsque vous exécutez le programme, la sortie sera:
Entrez le nombre de personnes: 2 Entrez respectivement le prénom et l'âge: Harry 24 Entrez le prénom et l'âge respectivement: Gary 32 Affichage des informations: Nom: Harry Âge: 24 Nom: Gary Âge: 32
Dans l'exemple ci-dessus, n nombre de variables de structure sont créés où n est entré par l'utilisateur.
Pour allouer la mémoire pour n nombre de struct person, nous avons utilisé,
ptr = (struct person*) malloc(n * sizeof(struct person));
Ensuite, nous avons utilisé le pointeur ptr pour accéder aux éléments de personne.