C - Syndicats
Un syndicat 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 mémoire. Vous pouvez définir une union avec plusieurs membres, mais un seul membre peut contenir une valeur à un instant donné. Les unions offrent un moyen efficace d'utiliser le même emplacement de mémoire à des fins multiples.
Définir un syndicat
Pour définir une union, vous devez utiliser l'union déclaration 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] { member definition; member definition; ... member definition; } [one or more union variables];
La étiquette syndicale est facultatif et chaque définition de membre est une définition de variable normale, telle que int i; ou flottant f ; ou toute autre définition de variable valide. A 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 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 Data type 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 de 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 −
Démo en direct#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éder aux membres de l'Union
Pour accéder à n'importe quel membre d'un syndicat, nous utilisons l'opérateur d'accès des membres (.) . L'opérateur d'accès aux membres est codé comme un point entre le nom de la variable d'union et le membre de l'union auquel nous souhaitons accéder. Vous utiliseriez le mot-clé union pour définir des variables de type union. L'exemple suivant montre comment utiliser les unions dans un programme −
Démo en direct#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 attribuée à la variable a occupé l'emplacement de la mémoire et c'est la raison pour laquelle la valeur de str le membre s'imprime très bien.
Examinons maintenant à nouveau le même exemple où nous utiliserons une variable à la fois, ce qui est le but principal d'avoir des unions −
Démo en direct#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 s'impriment très bien car un membre est utilisé à la fois.
Langue C