2-1-Cours - Structures de Donnéess
2-1-Cours - Structures de Donnéess
2-1-Cours - Structures de Donnéess
HALKHAMS IMANE
Déclaration de structure
Il y a plusieurs méthodes possibles pour déclarer des structures.
1-Première méthode
La déclaration :
struct personne
{
char nom[20];
char prenom[20];
int num_employe;
}; (remarque : il est obligatoire de mettre un point-virgule après l'accolade fermante).
Déclare l'identificateur « personne » comme étant le nom d'un type de structure composée
de trois éléments, dont le premier est un tableau de 20 caractères nommé « nom », le
second un tableau de 20 caractères nommé « prenom », et le dernier un entier nommé
« num_employe ». Dans le jargon du langage C, l'identificateur « personne » est une
étiquette de structure. On peut ensuite utiliser ce type structure pour déclarer des variables,
de la manière suivante :
struct personne p1, p2;
2-Deuxième méthode
On peut déclarer des variables de type structure sans utiliser d'étiquette de structure, par
exemple :
struct
{
char nom[20];
char prenom[20];
int num_employe;
} p1,p2;
Déclare 2 variables de noms p1 et p2 comme étant deux structures de trois éléments, mais
ne donne pas de nom au type de la structure. L'inconvénient de cette méthode est qu'il est
impossible de déclarer une autre variable du même type par la suite. En effet, si on écrit :
struct
{
char nom[20];
char prenom[20];
int num_employe;
} p3;
Les deux structures ont beau avoir le même nombre de champs, avec les mêmes noms et les
mêmes types, elles seront considérées de types différents. Il sera impossible en particulier
d'écrire p3 = p1.
3-Troisième méthode
On peut combiner déclaration d'étiquette de structure et déclaration de variables, comme :
struct personne
{
char nom[20];
char prenom[20];
int num_employe;
} p1,p2;
Déclare les deux variables p1 et p2 et donne le nom personne à la structure. Là aussi, on pourra
utiliser ultérieurement le nom struct personne pour déclarer d'autres variables :
qui seront du même type que p1 et p2. De ces 3 méthodes c'est la première qui permet de
bien séparer la définition du type structure de ses utilisations.
Une structure peut être initialisée par une liste d'expressions constantes à la manière des
initialisations de tableau. Exemple :
Pour désigner un membre d'une structure, il faut utiliser l'opérateur de sélection de membre
qui se note . (point). Par exemple, si p1 et p2 sont deux variables de type struct personne, on
désignera le membre nom de p1 par p1.nom et on désignera le membre num_employe de
p2 par p2.no_employe. Les membres ainsi désignés se comportent comme n'importe quelle
variable et par exemple, pour accéder au premier caractère du nom de p2, on écrira :
p2.nom[0].
Affectation de structures
On peut affecter une structure à une variable structure de même type, grâce à l'opérateur
d'affectation :
Comparaison de structures
Aucune comparaison n'est possible sur les structures, même pas les opérateurs == et !=.
Tableaux de structures
Une déclaration de tableau de structures se fait selon le même modèle que la déclaration
d'un tableau dont les éléments sont de type simple. Supposons que l'on ait déjà déclaré la
struct personne, si on veut déclarer un tableau de 100 structures de ce type, on écrira :
struct personne
{
...
};
on déclarera une variable de type pointeur vers une telle structure de la manière suivante :
struct personne
{
...
};
int main()
{
struct personne pers; /* pers est une variable de type struct personne */
struct personne *p; /* p est un pointeur vers une struct personne */
p = &pers;
}
Utilisation d’une structure de données :
Maintenant que la structure est définie, elle devra être enregistrée dans un fichier de type
« .h ». On va pouvoir l'utiliser dans une fonction du programme .c de la manière suivante :
Le typedef :
Dans le fichier .h qui contient la définition de notre structure de type personne. Nous allons
ajouter une instruction appelée « typedef » qui sert à créer un alias de structure, équivalent
à celle-ci. Pour ce, il faut commencer par typedef juste avant la définition de la structure :
typedef struct personne personne;
struct personne
{ char nom[20]; char prenom[20]; int num_employe; };
En clair, cette ligne dit « Écrire le mot personne est désormais équivalent à écrire struct
personne. En faisant cela, on aura plus besoin de mettre le mot struct à chaque définition de
variable de type personne. On peut donc retourner dans notre main et écrire tout
simplement :
int main()
{personne p1; // L'ordinateur comprend qu'il s'agit de "struct personne"
return 0;}
Exemple : programme qui enregistre une personne avec son nom, age et ville :
1-Fichier.h
struct personne
{ char nom[10];
int age;
char ville[10]; };
2-Fichier.c
#include<stdio.h>
#include "structure_personne.h"
int main()
{ struct personne p1;
printf("veuillez saisir votre nom");
scanf("%s",p1.nom);
printf("veuillez saisir votre age");
scanf("%d",&p1.age);
printf("veuillez saisir votre ville");
scanf("%s",p1.ville);
printf("votre nom est %s, votre age est %d et votre ville est %s
",p1.nom,p1.age,p1.ville); }