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.cstruct.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)