union

Un type union permet de déclarer des objets polymorphes (d’où le lien avec l’héritage et le polymorphisme des langages objet), à savoir des objets qui peuvent changer de formes, mais qui n’on à un moment donné qu’une forme et une seule.

L’objet var1 a 3 formes possibles : il peut être un tableau de 10 caractères, un entier ou un réel ; La taille d’un type union est assez grande pour contenir le plus grand champ (ici 10 caractères). Les champs sont situés à la même adresse (même premier octet).

On accède à un membre d’une union avec les mêmes opérateurs que pour une structure (. Et -> ).

Il n’y aucun contrôle d’accès aux champs (contrairement à la plus-part des langages qui possèdent un concept similaire).

Ceci est autorisé :

ce qui permet d’accéder aux octets représentant un nombre entier.

Une union est souvent imbriquée dans une structure.

Donne le jème caractère du tableau ligne dans le ième élément de la structure enregistrement.

Donne le ième nombre flottant du tableau reel.

L’utilisation principale correspond aux records à champs variants de Pascal ou Ada, Nous allons illustrer cette utilisation sur l’exemple d’un type complexe avec 2 représentations, polaire et cartésienne.

Le champ représentation sert de discriminant : la différence importante avec Pascal ou Ada, c’est qu’il n’y a aucun contrôle en C. On peut accéder au champ reel d’un objet de type complexe, même si sa forme est polaire.

Il est conseillé d’utiliser l’instruction switch pour manipuler ces records à champs variant.

» Glossaire du langage C