Les unions :
Les unions sont similaires aux structures, mais tous les membres d’une union partagent un même espace mémoire. Une union est une variable capable de stocker différents types de données.
Propriétés :
- Une union peut contenir un grand nombre de membre ;
- Les membres peuvent être de n’importe quel type ;
- L’espace mémoire d’une union est celui nécessaire pour le plus large de ses membres ;
- Les unions utilisent exactement la même syntaxe que les structures, le mot clé struct est remplacé par union.
Déclaration d’une union :
Syntaxe de définition :
Union nomUnion
{
type1 nomMembre1 ;
.
.
typeN nomMembreN ;
} ;
Syntaxe de déclaration :
union nomUnion y ;
Exemple :
Union expleUnion
{
char a ;
int b ;
float c ;
};
//Déclaration
union expleUnion z ;
On peut déclarer plusieurs objets du même type que z. Par exemple :
union expleUnion x, y ;
Autre syntaxe de déclaration:
union nomUnion
{
type1 nomMembre1 ;
.
.
typeN nomMembreN ;
} nomVariableUnion;
Il est possible de réaliser une union comportant par exemple un type de base, mais aussi un type structure.
Exemple :
struct complexe
{
float re ; //partie réelle
float im ; //partie imaginaire
float module ;
} ;
//
union
{
int value ;
struct complexe number ;
} c_nbr ;
On peut ainsi accéder au membre value de type entier de c_nbr, par :
c_nbr.value
De même pour d’autres parties de c_nbr, on peut y accéder en les désignant par :
c_nbr.number.re
c_nbr.number.im
c_nbr.number.module
Dans les propriétés, nous avons vu que les membres d'une union partagent un même espace mémoire avec celui alloué au plus large d'entre eux.
Prenons cet exemple:
union expleUnion
{
char a;
int b;
long int c;
} exple_1;
Ici, l'espace mémoire total alloué à la variable d'union exple_1 est égal à la taille de long int c, soit quatre octets.
Les unions sont souvent utilisées pour préserver l'espace mémoire d'une application. Certaines variables dont l'usage est temporaire et qui n'auront aucune chance d'être utilisées en même temps peuvent être déclarées dans une union.