adplus-dvertising

Structures et pointeurs en C

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

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

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