Structures et pointeurs en C

Do you want to read our courses in English? please visit our new website cs-teachers.com Click here

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 M. ESSADDOUKI

Many people realize their hearts desires late in life. Continue learning, never stop striving and keep your curiosity sharp, and you will never become too old to appreciate life.

0 Commentaire(s)

Pour laisser un commentaire vous devez avoir un compte Inscription, ou Se connecter