Unionen är en användardefinierad datatyp på C-språk som kan innehålla delar av de olika datatyperna precis som struktur. Men till skillnad från strukturer är alla medlemmar i C-facket lagrade på samma minnesplats. På grund av detta kan endast en medlem lagra data vid den givna instansen.

Syntax för union i C
Syntaxen för unionen i C kan delas in i tre steg som är följande:
C Unionsförklaring
I denna del deklarerar vi endast förbundets mall, det vill säga vi deklarerar endast medlemmarnas namn och datatyper tillsammans med förbundets namn. Inget minne tilldelas förbundet i deklarationen.
union union_name { datatype member1 ; datatype member2 ; ... };>
Tänk på att vi alltid måste avsluta den fackliga deklarationen med semikolon.
Olika sätt att definiera en unionsvariabel
Vi måste definiera en variabel av fackföreningstyp för att börja använda fackliga medlemmar. Det finns två metoder med vilka vi kan definiera en unionsvariabel.
- Med unionsförklaring
- Efter unionsförklaring
1. Definiera unionsvariabel med deklaration
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Definition av unionsvariabel efter deklaration
union union_name var1, var2, var3 ...;>
var fackföreningsnamn är namnet på ett redan deklarerat förbund.
Få tillgång till fackliga medlemmar
Vi kan komma åt medlemmarna i en fackförening genom att använda (. ) punktoperatorn precis som strukturer.
var1.member1 ;>
var var1 är facklig variabel och medlem1 är medlem i förbundet .
Ovanstående metod för att komma åt förbundets medlemmar fungerar även för de kapslade fackföreningarna.
var1.member1.memberA;>
Här,
- var1 är en facklig variabel.
- medlem1 är medlem i förbundet.
- medlemA är medlem i medlem 1.
Initialisering av unionen i C
Initieringen av en fackförening är initieringen av dess medlemmar genom att helt enkelt tilldela värdet till den.
var1.member1 = some_value ;>
En viktig sak att notera här är det endast en medlem kan innehålla något värde vid ett givet tillfälle.
Exempel på union
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;> }> |
>
>Produktion
The value stored in member1 = 15>
Unionens storlek
Storleken på föreningen kommer alltid att vara lika med storleken på den största medlemmen i arrayen. Alla mindre stora element kan lagra data i samma utrymme utan överflöd.

Minnestilldelning i C Union
Exempel 1: C-program för att hitta förbundets storlek
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;> }> |
>
>
sträng understrängProduktion
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Skillnaden mellan C-struktur och C-union
Följande tabell listar nyckelskillnaden mellan strukturen och unionen i C:
Strukturera | Union |
---|---|
Storleken på strukturen är lika med eller större än den totala storleken på alla dess delar. | Förbundets storlek är storleken på dess största medlem. |
Strukturen kan innehålla data i flera medlemmar samtidigt. | Endast en medlem kan innehålla data samtidigt. |
Det deklareras med hjälp av nyckelordet struct. | Det deklareras med hjälp av nyckelordet fackligt. |
Vanliga frågor om C Unions
1. Hur stor är det givna förbundet?
union un { int a; int arr[20]; }>
Svar: Storleken på den givna unionen är 20 x 4 byte = 80 byte. Även om arrayen är en samling av liknande dataelement, anses den vara en enda enhet av C-kompilatorn.
2. Kan vi lagra data i flera fackliga medlemmar samtidigt?
Nej. Vi kan bara lagra data i en enda medlem samtidigt. Till exempel i följande C-program delar både x och y samma plats. Om vi ändrar x kan vi se förändringarna reflekteras i y.
C
// 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;> }> |
java omvänd sträng
>
>Produktion
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. Vilka är fackföreningarnas tillämpningar?
Fackföreningar kan vara användbara i många situationer där vi vill använda samma minne för två eller flera medlemmar. Anta till exempel att vi vill implementera en binär träddatastruktur där varje lövnod har ett dubbelt datavärde, medan varje intern nod har pekare till två barn, men ingen data. Om vi deklarerar detta som:
C
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
>
sedan kräver varje nod 16 byte, med hälften av byten slösas bort för varje typ av nod. Å andra sidan, om vi deklarerar en nod som följande, kan vi spara utrymme.
C
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>