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