syndicat C
Union est un type de données spécial qui vous 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 avoir une valeur à tout moment. Les unions offrent un moyen efficace d’utiliser le même emplacement mémoire.
Définir une union
Pour définir une union, vous devez utiliser l'instruction union, de la même manière que pour définir une structure. L'instruction union définit un nouveau type de données avec plusieurs membres. 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];
union tag est facultatif et chaque définition de membre est une définition de variable standard, telle que int i ou float f ou autre valide ; définitions de variables. À la fin de la définition de l'union, avant le dernier point-virgule, vous pouvez éventuellement spécifier une ou plusieurs variables d'union. Un type d'union nommé Data est défini ci-dessous, avec trois membres i, f et str :
union Data{ int i; float f; char str[20];} data;
Maintenant, une variable de type Data peut stocker un entier, un nombre à virgule flottante ou un chaîne. Cela signifie qu'une variable (même emplacement mémoire) peut stocker plusieurs données de plusieurs types. Vous pouvez utiliser n'importe quel type de données intégré ou défini par l'utilisateur au sein d'une communauté selon vos besoins.
La mémoire occupée par le syndicat devrait suffire à stocker le plus grand membre du syndicat. Par exemple, dans l'exemple ci-dessus, Data occupera 20 octets d'espace mémoire car la chaîne occupe le plus grand espace parmi les différents membres. L'exemple suivant affichera 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 produira les résultats suivants :
Memory size occupied by data : 20
Accès aux membres de l'union
Pour accéder aux membres d'un syndicat, nous utilisons l'opérateur d'accès aux membres (.). L'opérateur d'accès aux membres est un point entre le nom de la variable syndicale et le membre syndical auquel nous voulons accéder. Vous pouvez utiliser le mot-clé union pour définir des variables de type union. L'exemple suivant démontre l'utilisation 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; 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 les résultats suivants :
data.i : 1917853763data.f : 4122360580327794860452759994368.000000data.str : C Programming
Ici, nous pouvons voir les valeurs du Les membres i et f sont corrompus car la dernière valeur attribuée à la variable occupe l'emplacement mémoire, c'est pourquoi le membre str peut être sorti intact. Regardons maintenant à nouveau le même exemple, cette fois nous n'utilisons qu'une seule variable à la fois, ce qui démontre également l'objectif principal de l'utilisation 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 est ce qui suit les résultats seront produits :
data.i : 10data.f : 220.500000data.str : C Programming
Ici, tous les membres peuvent être affichés intacts car un seul membre est utilisé en même temps.