Programmation en C – Les unions

Union est un type de données spécial disponible en C qui permet de stocker différents types de données dans le même emplacement de mémoire. Vous pouvez définir une union avec plusieurs membres, mais un seul membre peut contenir une valeur à la fois. Les Unions offrent un moyen efficace d’utiliser le même emplacement de mémoire à des fins multiples.
 
 

Définir une union

Pour définir une union, vous devez utiliser l’instruction union de la même manière que vous l’avez fait lors de la définition d’une structure. L’instruction union définit un nouveau type de données avec plusieurs membres pour votre programme. Le format de la déclaration d’union est le suivant

union [union tag] {
    définition de membre1;
    définition de membre2;
   ...
    définition de membreN;
} [une ou plusieurs variables d'union];  

union tag est facultative et chaque définition de membre est une définition de variable normale, telle que int a; ou float b; ou toute autre définition de variable valide. À la fin de la définition de l’union, avant le dernier point-virgule, vous pouvez spécifier une ou plusieurs variables d’union, mais c’est facultatif. Voici comment définir un type d’union nommé MaUnion ayant trois membres a, b et tab

union MaUnion {
   int a;
   float b;
   char tab[10];
} maunion; 

Maintenant, une variable de type MaUnion peut stocker un entier, un nombre flottante ou une chaîne de caractères. Cela signifie qu’une seule variable, c’est-à-dire le même emplacement de mémoire, peut être utilisée pour stocker plusieurs types de données. Vous pouvez utiliser n’importe quel type de données dans une union en fonction de vos besoins.

La mémoire occupée par une union sera assez grande pour contenir le plus grand membre de l’union. Par exemple, dans l’exemple ci-dessus, le type de données occupera 10 octets d’espace mémoire car il s’agit de l’espace maximal pouvant être occupé par une chaîne de caractères. L’exemple suivant affiche la taille totale de la mémoire occupée par l’union ci-dessus

#include <stdio.h>
#include <string.h>
 
union MaUnion {
   int a;
   float b;
   char tab[10];
} maunion;
 
int main( ) {

   union MaUnion maunion;        

   printf( "Taille de la mémoire occupée par maunion : %dn", sizeof(maunion));

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant

Taille de la mémoire occupée par maunion : 12

 

Accéder aux membres de l’Union

Pour accéder à un membre d’une union, nous utilisons l’opérateur d’accès membre (.). L’opérateur d’accès membre est codé comme une point entre le nom de la variable d’union et le membre d’union auquel nous souhaitons accéder. Vous utiliseriez le mot-clé union pour définir les variables de type union. L’exemple suivant montre comment utiliser des unions dans un programme

#include <stdio.h>
#include <string.h>
 
union MaUnion {
   int a;
   float b;
   char tab[10];
} maunion;
 
int main( ) {

   union MaUnion maunion;       

   maunion.a = 10;
   maunion.b = 220.5;
   strcpy( maunion.tab, "Bonjour");

   printf( "maunion.a : %dn", maunion.a);
   printf( "maunion.b : %fn", maunion.b);
   printf( "maunion.tab : %sn", maunion.tab);

   return 0;
}

 
 
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant

maunion.a : 1785622338
maunion.b : 72062436308247284757299200.000000
maunion.tab : Bonjour

Ici, nous pouvons voir que les valeurs des membres a et b de l’union ont été corrompues parce que la valeur finale affectée à la variable a occupé l’emplacement mémoire et c’est la raison pour laquelle la valeur du membre tab est affichée très bien.

Maintenant, regardons le même exemple encore une fois où nous allons utiliser une variable à la fois, ce qui est le but principal d’avoir des unions

#include <stdio.h>
#include <string.h>
 
union MaUnion {
   int a;
   float b;
   char tab[10];
} maunion;
 
int main( ) {

   union MaUnion maunion;       

   maunion.a = 10;
   printf( "maunion.a : %dn", maunion.a);
   
   maunion.b = 220.5;
   printf( "maunion.b : %fn", maunion.b);
   
   strcpy( maunion.tab, "Bonjour");
   printf( "maunion.tab : %sn", maunion.tab);

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant

maunion.a : 10
maunion.b : 220.500000
maunion.tab : Bonjour

Ici, tous les membres s’affichent très bien parce que chaque membre est utilisé à la fois.
 
 

Partagez cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *