C - Syndicats

UNE unionest 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 mémoire. Vous pouvez définir une union avec plusieurs membres, mais un seul membre peut contenir une valeur à un moment donné. Les unions offrent un moyen efficace d'utiliser le même emplacement mémoire à des fins multiples.

Définir une union

Pour définir une union, vous devez utiliser le unionde 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 plus d'un membre pour votre programme. Le format de la déclaration d'union est le suivant -

union [union tag] {
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];

le union tagest facultative et chaque définition de membre est une définition de variable normale, telle que int i; ou float f; ou toute autre définition de variable valide. À la fin de la définition de l'union, avant le point-virgule final, vous pouvez spécifier une ou plusieurs variables d'union, mais c'est facultatif. Voici la façon dont vous définiriez un type d'union nommé Data ayant trois membres i, f et str -

union Data {
   int i;
   float f;
   char str[20];
} data;

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

La mémoire occupée par un syndicat sera suffisamment grande pour contenir le plus grand membre du syndicat. Par exemple, dans l'exemple ci-dessus, le type de données occupera 20 octets d'espace mémoire car il s'agit de l'espace maximum 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 Data {
   int i;
   float f;
   char str[20];
};
 
int main( ) {

   union Data data;        

   printf( "Memory size occupied by data : %d\n", sizeof(data));

   return 0;
}

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

Memory size occupied by data : 20

Accès aux membres du syndicat

Pour accéder à tout membre d'un syndicat, nous utilisons le member access operator (.). L'opérateur d'accès aux membres est codé comme un point entre le nom de la variable union et le membre syndical auquel nous souhaitons accéder. Vous utiliseriez le mot-cléunionpour définir des variables de type union. L'exemple suivant montre comment utiliser les unions dans un programme -

#include <stdio.h>
#include <string.h>
 
union Data {
   int i;
   float f;
   char str[20];
};
 
int main( ) {

   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);

   return 0;
}

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

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

Ici, nous pouvons voir que les valeurs de i et f les membres de l'union ont été corrompus car la valeur finale affectée à la variable a occupé l'emplacement mémoire et c'est la raison pour laquelle la valeur de str Le député est très bien imprimé.

Regardons maintenant à nouveau le même exemple où nous utiliserons une variable à la fois, ce qui est le principal objectif d'avoir des unions -

#include <stdio.h>
#include <string.h>
 
union Data {
   int i;
   float f;
   char str[20];
};
 
int main( ) {

   union Data data;        

   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);

   return 0;
}

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

data.i : 10
data.f : 220.500000
data.str : C Programming

Ici, tous les membres sont très bien imprimés car un membre est utilisé à la fois.