FLSI602 Génie Informatique et Réseaux Alberto Bosio alberto.bosio@lirmm.fr www.lirmm.fr/~bosio/FLSI602
Les structures #include <string.h> int age; } mere,pere; Une généralisation de la notion de tableaux #include <string.h> int age; } mere,pere;
Les structures … }
Les structures int age; } personne_t; Une généralisation de la notion de tableaux int age; } personne_t;
Les structures printf (" mere : age %d , nom % s\n", mere.age, mere.nom); }
Les structures typedef struct repertoire { char nom[50+1]; Un tableau de structures typedef struct repertoire { char nom[50+1]; char adresse[50+1]; char telephone[50+1]; int age } repertoire_t; repertoire_t agenda[5]; strcpy (agenda[0].nome , “Dupont”); strcpy (agenda[0].adresse , “35, rue exemple”); strcpy (agenda[0].telephone , “+3306569874”); agenda[0].age = 27;
Exemple repertoire_t monsieur; /* variable */ monsieur nom adresse telephone age
Exemple “Dupont” “+3306569874” repertoire_t monsieur; /* variable */ “35,rue exemple” “+3306569874” 27 nom adresse telephone age strcpy (agenda[0].nome , “Dupont”); strcpy (agenda[0].adresse , “35, rue exemple”); strcpy (agenda[0].telephone , “+3306569874”); agenda[0].age = 27;
Exemple repertoire_t messieurs[3]; /* variable */ messieurs 1 2 nom 1 2 nom adresse telephone age
Exemple repertoire messieurs[3]; // variable messieurs 1 2 nom adresse strcpy (agenda[1].nome , “Dupont”); strcpy (agenda[1].adresse , “35, rue exemple”); strcpy (agenda[1].telephone , “+3306569874”); agenda[1].age = 27; repertoire messieurs[3]; // variable messieurs 1 2 nom adresse telephone age
Exemple repertoire messieurs[3]; // variable messieurs 1 2 “Dupont” strcpy (agenda[1].nome , “Dupont”); strcpy (agenda[1].adresse , “35, rue exemple”); strcpy (agenda[1].telephone , “+3306569874”); agenda[1].age = 27; repertoire messieurs[3]; // variable messieurs 1 2 “Dupont” “35,rue exemple” “+3306569874” 27 nom adresse telephone age
Les structures Imbrication de structures et tableaux typedef struct Couple { Personne_t membre[2]; int statut }couple_t; couple_t X; X.membre[0] = pere; X.membre[1] = mere; X.statut = 1; /* MARIE */ X.membre[0].age = X.membre[0].age + 1;
Les structures Modes de transmission Par valeur : une copie champ à champ est réalisée Par référence/adresse : plus rapide void affiche1(personne_t p) { /* p est une copie du point passé en argument */ printf (" p : age %d , nom % s\n", p.age, p.nom); } void affiche2(personne_t *p) { printf (" p : age %d , nom % s\n", (*p).age, (*p).nom);
Allocation dynamique de structures typedef struct Point { int x; int y; } point_t; point_t A; A.x = 3; A.y = 5; point_t *pA; /* Déclaration d’un pointeur */ pA = (point_t*) malloc (sizeof (point_t)); /* Allocation dynamique */ pA->x = 7; pA->y = 3;
Allocation dynamique de structures Operatuer « -> » Équivalent a l’operatuer « * » (*pA).x = 7; (*pA).y = 3; typedef struct Point { int x; int y; } point_t; point_t A; A.x = 3; A.y = 5; point_t *pA; /* Déclaration d’un pointeur */ pA = (point_t*) malloc (sizeof (point_t)); /* Allocation dynamique */ pA->x = 7; pA->y = 3;
Allocation dynamique de structures point_t *pB; /* Copie de pointeur */ pB = pA; pB->y = pB->x + 1;
Allocation dynamique de structures pA = &A; /* Affectation statique */ pA->x = 1; (*pA).y = A.y - 1;
Allocation dynamique de structures free (pA); /* Libération de mémoire */ pA = pB = 0;
Exercice On veut mémoriser des informations relatives aux employés d'une entreprise. Chaque employé est caractérisé par <Code Employé> <nom> <prénom> Pour chaque employé il faut mémoriser le nombre m de semaine de travail de l’année. Pour chaque semaine il faut mémoriser la nombre de jour de travail dans la semaine. Pour chaque jour de travail il faut mémoriser le nombre d’heure de travail.
Exercice Nombre de semaines de travail est un entier entre 1 et 52 Nombre de jours de travail est un entier entre 1 et 7 Nombre d’heures de travail par jour est un entier entre 1 et 24