Extrait du cours Cours Langage C: Types structurés et allocation dynamique
Les structures
Objets regroupant plusieurs données appelées « champs » à définir hors d’une fonction définition:
struct nom { type_champ1 nom_champ1; type_champ2 nom_champ2; ..};
Les structures
Déclaration d’une variable:
struct nom_type nom_var;
accès aux champs: nom_var.nom_champ
struct complex { double real; double imaginary; }; int main(int argc,char* argv[]) { struct complex c; c.real=1.2; c.imaginary=6.3; printf("%f+%f*i\n",c.real,c.imaginary); return 0; }
Choix des champs
On peut mettre tout ce dont le compilateur connaît la taille on ne peut donc pas mettre la structure elle-même:
struct list { int value; struct list next; }; $>gcc -Wall -ansi struct.c
struct.c:7: champ « next » a un type incomplet
Structures récursives
Mais on peut mettre un pointeur sur la structure, car la taille des pointeurs est connue:
struct list { int value; struct list* next; };
Imbrication de structures
Un champ peut être une structure:
struct id { char firstname[MAX]; char lastname[MAX]; }; struct people { struct id id; int age; }; int main(int argc,char* argv[]) { struct people p; strcpy(p.id.firstname,"Master"); strcpy(p.id.lastname,"Yoda"); p.age=943; /* ... */ return 0; }
Imbrication de structures
Structures peuvent s’appeler l’une l’autre, à condition d’utiliser des pointeurs:
struct state { struct transition* t; char final; }; struct transition { char letter; struct state* dest; struct transition* next; };
……….
Cours Langage C: Types structurés et allocation dynamique (224 KO) (Cours PDF)