De Union is een door de gebruiker gedefinieerd gegevenstype in C-taal dat, net als de structuur, elementen van de verschillende gegevenstypen kan bevatten. Maar in tegenstelling tot structuren worden alle leden van de C-unie op dezelfde geheugenlocatie opgeslagen. Hierdoor kan slechts één lid gegevens opslaan op het gegeven exemplaar.

Syntaxis van Union in C
De syntaxis van de unie in C kan in drie stappen worden verdeeld, namelijk:
C Unieverklaring
In dit deel declareren we alleen het sjabloon van de vakbond, dat wil zeggen dat we alleen de namen en gegevenstypen van de leden declareren, samen met de naam van de vakbond. Er wordt in de declaratie geen geheugen toegewezen aan de unie.
union union_name { datatype member1 ; datatype member2 ; ... };>
Houd er rekening mee dat we de vakbondsverklaring altijd moeten eindigen met een puntkomma.
Verschillende manieren om een Union-variabele te definiëren
We moeten een variabele van het vakbondstype definiëren om vakbondsleden te kunnen gebruiken. Er zijn twee methoden waarmee we een unievariabele kunnen definiëren.
- Met Unieverklaring
- Na de Verklaring van de Unie
1. Unionvariabele definiëren met declaratie
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Unionvariabele definiëren na declaratie
union union_name var1, var2, var3 ...;>
waar vakbondsnaam is de naam van een reeds uitgeroepen vakbond.
Toegang tot vakbondsleden
We kunnen toegang krijgen tot de leden van een vakbond door de puntoperator (.) te gebruiken, net als bij structuren.
var1.member1 ;>
waar var1 is de unie variabele En lid1 is de lid van de vakbond .
De bovenstaande methode om toegang te krijgen tot de leden van de vakbond werkt ook voor de geneste vakbonden.
var1.member1.memberA;>
Hier,
- var1 is een unievariabele.
- lid1 is lid van de vakbond.
- lidA is lid van lid1.
Initialisatie van Union in C
De initialisatie van een vakbond is de initialisatie van haar leden door er eenvoudigweg de waarde aan toe te kennen.
var1.member1 = some_value ;>
Een belangrijk ding om hier op te merken is dat slechts één lid kan op een bepaald moment een bepaalde waarde bevatten.
Voorbeeld van Unie
C
// C Program to demonstrate how to use union> #include> // union template or declaration> union> un {> > int> member1;> > char> member2;> > float> member3;> };> // driver code> int> main()> {> > // defining a union variable> > union> un var1;> > // initializing the union member> > var1.member1 = 15;> > printf> (> 'The value stored in member1 = %d'> ,> > var1.member1);> > return> 0;> }> |
>
>Uitvoer
The value stored in member1 = 15>
Grootte van de Unie
De grootte van de unie zal altijd gelijk zijn aan de grootte van het grootste lid van de array. Alle kleinere elementen kunnen de gegevens in dezelfde ruimte opslaan zonder enige overloop.

Geheugentoewijzing in C Union
Voorbeeld 1: C-programma om de grootte van de unie te vinden
C
// C Program to find the size of the union> #include> // declaring multiple unions> union> test1 {> > int> x;> > int> y;> } Test1;> union> test2 {> > int> x;> > char> y;> } Test2;> union> test3 {> > int> arr[10];> > char> y;> } Test3;> // driver code> int> main()> {> > // finding size using sizeof() operator> > int> size1 => sizeof> (Test1);> > int> size2 => sizeof> (Test2);> > int> size3 => sizeof> (Test3);> > printf> (> 'Sizeof test1: %d
'> , size1);> > printf> (> 'Sizeof test2: %d
'> , size2);> > printf> (> 'Sizeof test3: %d'> , size3);> > return> 0;> }> |
>
>
css vetgedrukte tekstUitvoer
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Verschil tussen C-structuur en C-unie
De volgende tabel geeft een overzicht van het belangrijkste verschil tussen de structuur en de unie in C:
Structuur | Unie |
---|---|
De grootte van de structuur is gelijk aan of groter dan de totale grootte van alle leden. | De omvang van de vakbond is de omvang van het grootste lid. |
De structuur kan tegelijkertijd gegevens in meerdere leden bevatten. | Slechts één lid kan tegelijkertijd gegevens bevatten. |
Het wordt gedeclareerd met het trefwoord struct. | Het wordt gedeclareerd met behulp van het trefwoord union. |
Veelgestelde vragen over C-vakbonden
1. Wat is de omvang van de gegeven unie?
union un { int a; int arr[20]; }>
Antw.: De grootte van de gegeven unie is 20 x 4 bytes = 80 bytes. Zelfs als de array een verzameling vergelijkbare gegevenselementen is, wordt deze door de C-compiler als één enkele entiteit beschouwd.
2. Kunnen we gegevens van meerdere vakbondsleden tegelijk opslaan?
Nee. We kunnen slechts gegevens van één lid tegelijk opslaan. In het volgende C-programma delen x en y bijvoorbeeld dezelfde locatie. Als we x veranderen, kunnen we zien dat de veranderingen worden weerspiegeld in y.
C
Java-stringklasse
// C program to check if we can store data in multiple union> // members> #include> // Declaration of union is same as structures> union> test {> > int> x, y;> };> int> main()> {> > // A union variable t> > union> test t;> > t.x = 2;> // t.y also gets value 2> > printf> (> 'After making x = 2:
x = %d, y = %d
'> , t.x,> > t.y);> > t.y = 10;> // t.x is also updated to 10> > printf> (> 'After making y = 10:
x = %d, y = %d
'> , t.x,> > t.y);> > return> 0;> }> |
>
>Uitvoer
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. Wat zijn de toepassingen van vakbonden?
Vakbonden kunnen nuttig zijn in veel situaties waarin we hetzelfde geheugen voor twee of meer leden willen gebruiken. Stel dat we bijvoorbeeld een binaire boomgegevensstructuur willen implementeren waarbij elk bladknooppunt een dubbele gegevenswaarde heeft, terwijl elk intern knooppunt verwijzingen naar twee kinderen heeft, maar geen gegevens. Als we dit declareren als:
C
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
>
dan heeft elk knooppunt 16 bytes nodig, waarbij de helft van de bytes wordt verspild voor elk type knooppunt. Aan de andere kant, als we een knooppunt als volgt declareren, kunnen we ruimte besparen.
C
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>