logo

C Vakbonden

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.

vakbonden-in-c

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.



  1. Met Unieverklaring
  2. 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 unie

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 tekst
Uitvoer

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;> };>

>

>