Structures et pointeurs en C
Prérequis
Avant d'apprendre comment les pointeurs peuvent être utilisés avec des structures, assurez-vous de consulter les cours suivants:
Pointeurs sur des structures
Voici comment créer des pointeurs sur des structures.
Exemple 1 :
#include < stdio.h> struct etudiant{ char nom[20]; int age; }; int main(void){ // pointeur et1 de type etudiant struct etudiant *et1; return 0 }
Ici, un pointeur et1 de type <struct etudiant> est créé. C'est-à-dire que et1 est un pointeur sur struct.
Accéder aux membres à l'aide de Pointer
Exemple 2 :
#include < stdio.h> struct etudiant{ char prenom[20]; int age; }; int main(void){ // pointeur et1 de type etudiant struct etudiant *et1; struct etudiant et2; // initialisation et1=&et2; printf("Saisir votre prénom : "); scanf("%s",&et1->prenom); printf("saisir votre age : "); scanf("%d",&et1->age); printf("voici vos infos : "); printf("Prénom : %s",et1->prenom); printf("age : %d",et1->age); return 0; }
Saisir votre prénom : Mostafa
saisir votre age : 32
voici vos infos :
Prénom : Mostafa
age : 32
saisir votre age : 32
voici vos infos :
Prénom : Mostafa
age : 32
Dans cet exemple, l'adresse de et2 est stockée dans le pointeur et1 à l'aide de et1 = &et2 ;
Maintenant, vous pouvez accéder aux membres de et2 en utilisant le pointeur et1.
- et1->prenom équivalente à (*et1).prenom
- et1->age équivalente à (*et1).age
Allocation dynamique de la mémoire aux structures
Exemple 3 :
#include < stdio.h> struct etudiant{ char prenom[20]; int age; }; int main(void){ // pointeur et1 de type etudiant struct etudiant *et1; // réservation de la mémoire et1=(struct etudiant*)malloc(sizeof(struct etudiant)); printf("Saisir votre prénom : "); scanf("%s",&et1->prenom); printf("saisir votre age : "); scanf("%d",&et1->age); printf("voici vos infos : "); printf("Prénom : %s",et1->prenom); printf("age : %d",et1->age); return 0; }
Saisir votre prénom : Mostafa
saisir votre age : 24
voici vos infos :
Prénom : Mostafa
age : 24
saisir votre age : 24
voici vos infos :
Prénom : Mostafa
age : 24
Exemple 4 : tableau d'etudiants
#include < stdio.h> struct etudiant{ char prenom[20]; int age; }; int main(void){ // pointeur et1 de type etudiant struct etudiant *tab; int n,i; printf("saisir le nombre d'étudiants : "); scanf("%d",&n); // réservation de la mémoire de n etudiants tab=(struct etudiant*) malloc( n * sizeof(struct etudiant)); for(i=0;i< n;i++){ printf("-------- etudiant N° %d --------- \n",i); printf("Saisir le prénom : "); scanf("%s",&(tab+i)->prenom); printf("saisir l'age : "); scanf("%d",&(tab+i)->age); } printf("Affichage de la liste d'etudiants : "); for(i=0;i< n;i++){ printf("Etudiant N° %d \n",i); printf("Prénom : %s \n",(tab+i)->prenom); printf("age : %d \n",(tab+i)->age); } return 0; }
saisir le nombre d'étudiants : 3
-------- etudiant N° 1 ---------
Saisir le prénom : Mostafa
saisir l'age : 23
-------- etudiant N° 2 ---------
Saisir le prénom : Ismail
saisir l'age : 20
-------- etudiant N° 3 ---------
Saisir le prénom : Dounia
saisir l'age : 22
Affichage de la liste d'etudiants :
Etudiant N° 1
Prénom : Mostafa
age : 23
Etudiant N° 2
Prénom : Ismail
age : 20
Etudiant N° 3
Prénom : Dounia
age : 22
-------- etudiant N° 1 ---------
Saisir le prénom : Mostafa
saisir l'age : 23
-------- etudiant N° 2 ---------
Saisir le prénom : Ismail
saisir l'age : 20
-------- etudiant N° 3 ---------
Saisir le prénom : Dounia
saisir l'age : 22
Affichage de la liste d'etudiants :
Etudiant N° 1
Prénom : Mostafa
age : 23
Etudiant N° 2
Prénom : Ismail
age : 20
Etudiant N° 3
Prénom : Dounia
age : 22
Dans l'exemple ci-dessus, un tableau de n "struct etudiant" est créé où n est entré par l'utilisateur.
Pour allouer la mémoire pour un tableau de n etudiants :
tab=(struct etudiant*) malloc( n * sizeof(struct etudiant));
Partager ce cours avec tes amis :
Rédigé par
ESSADDOUKI
Mostafa