Les structures
I. Déclaration d’un modèle de structure
struct <Nom modèle>
{<Type> variable1 ;
<Type> variable2 ;
<Type> variableN ;
};
Cette déclaration définit un modèle de structure (Nouveau type) mais ne réserve pas de l’espace
mémoire (variable)
Exemples :
1. struct point
{ char design ;
double x ;
double y ;
};
2. struct produit
{ char code[5] ;
float pu ;
int qtite ;
};
3. struct complex
{ double reel ;
double img ;
};
II. Déclaration de variable de type structure
La déclaration d’une variable structure se fait comme suit :
struct <NomModèle> <NomVariableStructure> ;
Cette instruction permet de déclarer une variable nommée <NomVariableStructure> de type
struct <NomModèle>.
Exemples :
struct point cord1, cord2 ;
struct produit p1, p2 ;
struct complex nb1, nb2, nb3 ;
III. Utilisation d’une structure
Le travail avec les structures peut s’effectuer de deux façons différentes :
individuellement sur chaque champ de la structure (en utilisant l’opérateur de champ "." ).
de manière globale sur l’ensemble de la structure.
Exemples :
p1 = p2 ;
scanf("%d %d",cord1.x, cord1.y) ;
scanf("%lf", [Link]) ;
printf("%d ",[Link]) ;
[Link] = 'A' ; [Link] += 10 ;
cord1.x++ ; cord1.y-- ;
scanf("%lf", [Link]) ;
printf("%d ",[Link]) ;
[Link] = 'A' ; [Link] += 10 ;
cord1.x++ ; cord1.y-- ;
IV. Initialisation d’une structure
struct produit p3 = { 'AB1', 200, 150.695 } ; // initialisation lors de la déclaration
struct produit p3 ;
[Link] = 'Puma' ;
[Link] = 1500 ;
[Link] = 30.85 ;
V. Types de structures
1. Structure comportant des tableaux
struct etudiant
{ char nom[50] ;
char pren[50] ;
float notes[10] ;
};
struct etudiant etud1, etud2 ;
Manipulation
[Link][0]=20 ;
scanf("%f", [Link][5]) ;
printf("%f", [Link][8]) ;
strcpy([Link], "Amira") ;
2. Tableaux de structures
struct produit
{ char code ;
int qte ;
float pu ;
};
struct produit depot[25];
Manipulation
depot[0].code='A' ;
for(i=0 ; i<25 ; i++)
{ scanf("%f %d", depot[i].qte, depot[i].pu) ;
depot[i].code=getchar() ;
}
NB :
depot[i] : ième élément du tableau depot
depot[i].code : le code du produit de rang i du tableau depot
3. Structures comportant d’autres structures
struct date
{ int jj ;
int mm ;
int aa ; } ;
struct livre
{ char auteur[40] ;
int titre[50] ;
struct date date_edit
struct date date_sortie ;
};
struct livre l1, l2;
Manipulation
l1.date_edit.jj = 20 ;
l1.date_edit.mm = 12 ;
l1.date_edit.aa = 2003 ;
l1.date_edit = l2.date_sortie ;
4. Structures sans nom de modèle (type)
struct
{ char nom[20];
int age ;
} x1, x2 ;
Inconvenient :
On ne sait pas de quoi s’agit-t-il
Invisibilité lorsqu’il existe plusieurs structures sans nom de type (manque de lisibilité).
VI. Opérations sur les structures
1. Affectation
struct date d1, d2;
d1 = d2 affectation globale de variables de type structure
struct livre l1, l2;
Affectation entre les champs de structures
strcpy([Link], [Link])
l1.date_edit = l2.date_sortie
2. Opérateur de champs
[Link]
l2.date_edit
l1.date_sortie.aa
C’est le point qui sépare le nom de structure et son champ
3. Comparaison
if(d1 == d2) comparaison globale de variables de type structure
if( !strcmp([Link], [Link]))
Comparaison entre les champs de structures
if([Link] >= [Link]
4. Dimension
printf(" %d", sizeof(struct livre)) dimension d’un type structure
printf(" %d", sizeof(d1)) dimension d’une variable structure