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
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.
