Une structure est une
variable qui regroupe une ou plusieurs variables, non nécessairement de même
type (contrairement aux tableaux), appelées champs. L'accès à un champ d'une
structure se fait par l'intermédiaire de l'opérateur point. Par exemple :
|
D'habitude on renomme tout
d'abord une structure avant de l'utiliser. Par exemple :
|
Une structure peut être
également nommée. Par exemple :
|
Dans ce cas, marc, luc et
jean sont de type struct personne_s. On aurait également pu écrire :
|
Puis :
|
Et bien entendu, du moment
qu'une structure a été nommée, on peut très bien écrire :
|
L'opérateur = (affectation)
peut être utilisé avec des structures (pour copier une structure) mais dans la
pratique on n'en a rarement besoin. En effet, puisque l'espace occupée en
mémoire par une structure peut être gigantesque, copier une structure vers une
autre pénalisera considérablement, non seulement en termes de performances mais
aussi en termes de vitesse d'exécution (à cause du temps d'accès à une cellule
mémoire). C'est pourquoi on utilise généralement des pointeurs pour manipuler
les structures. L'opérateur -> permet d'accéder à un champ d'une structure
via un pointeur. Par exemple :
|
L'initialisation d'une
structure se fait de la même manière que pour un tableau, avec les mêmes
règles. Par exemple :
|
Une union est, en
première approximation, une variable dont le type n'est pas figé (c'est-àdire une variable « caméléon »). En fait, une variable de type
union est une variable composée de champs de types différents et non
nécessairement de même taille, mais à la différence d'une structure, les
champs d'une union partagent le même emplacement mémoire. Les unions
permettent donc de faire une économie de mémoire. Du point de vue syntaxique,
elles ressemblent beaucoup aux structures, il suffit de remplacer struct par
union.
Le programme suivant montre un exemple d'utilisation de cette union, u, entre
trois variables de types différents (n, x et p).
|
Puisque les champs d'une
union utilisent le même espace mémoire, les unions sont également utilisées
pour interpréter un même motif binaire dans différents contextes (par exemple
pour interpréter le contenu d'une mémoire comme un flottant, ou comme un
entier, ...), mais cette pratique est généralement utilisée dans les programmes
de très bas niveau plutôt que dans des programmes portables.
Une énumération est un
sous-ensemble énuméré du type int. La déclaration d'une énumération ressemble
un peu à celle d'une structure Par exemple :
|
Qu'on aurait également pu
écrire :
|
L'opérateur = peut également
être utilisé dans une déclaration d'un type énuméré pour assigner explicitement
une valeur à une constante.