Savienība ir lietotāja definēts datu tips C valodā, kas var saturēt dažādu datu tipu elementus, tāpat kā struktūru. Bet atšķirībā no struktūrām visi C savienības locekļi tiek glabāti vienā atmiņas vietā. Sakarā ar to tikai viens dalībnieks var saglabāt datus attiecīgajā instancē.

Union sintakse valodā C
C savienības sintakse var iedalīt trīs soļos, kas ir šādi:
C Savienības deklarācija
Šajā daļā mēs deklarējam tikai savienības veidni, t.i., mēs deklarējam tikai biedru vārdus un datu tipus kopā ar savienības nosaukumu. Arodbiedrībai deklarācijā atmiņa nav atvēlēta.
union union_name { datatype member1 ; datatype member2 ; ... };>
Ņemiet vērā, ka arodbiedrības deklarācija mums vienmēr ir jābeidz ar semikolu.
Dažādi veidi, kā definēt Savienības mainīgo
Lai sāktu izmantot arodbiedrības biedrus, mums ir jādefinē arodbiedrības tipa mainīgais. Ir divas metodes, ar kurām mēs varam definēt savienības mainīgo.
- Ar Savienības deklarāciju
- Pēc Savienības deklarācijas
1. Savienības mainīgā definēšana ar deklarāciju
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Savienības mainīgā definēšana pēc deklarācijas
union union_name var1, var2, var3 ...;>
kur savienības_nosaukums ir jau deklarētas savienības nosaukums.
Piekļūstiet savienības biedriem
Mēs varam piekļūt arodbiedrības dalībniekiem, izmantojot punktu operatoru (. ) tāpat kā struktūras.
var1.member1 ;>
kur var1 ir savienības mainīgais un dalībnieks1 ir savienības biedrs .
Iepriekš minētā metode, kā piekļūt arodbiedrības locekļiem, darbojas arī ligzdotajām arodbiedrībām.
var1.member1.memberA;>
Šeit,
- var1 ir savienības mainīgais.
- dalībnieks1 ir arodbiedrības biedrs.
- biedrs A ir Member1 dalībnieks.
Savienības inicializācija C
Apvienības inicializācija ir tās dalībnieku inicializācija, vienkārši piešķirot tai vērtību.
var1.member1 = some_value ;>
Šeit ir jāņem vērā viena svarīga lieta tikai viens dalībnieks var saturēt kādu vērtību noteiktā laika instancē.
Savienības piemērs
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;> }> |
>
>Izvade
The value stored in member1 = 15>
Savienības lielums
Apvienības lielums vienmēr būs vienāds ar lielākā masīva dalībnieka izmēru. Visi mazāka izmēra elementi var uzglabāt datus vienā un tajā pašā vietā bez pārpildes.

Atmiņas piešķiršana C Savienībā
1. piemērs: C programma, lai atrastu savienības lielumu
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;> }> |
>
>
kā java savienot virknesIzvade
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Atšķirība starp C struktūru un C savienību
Šajā tabulā ir norādītas galvenās atšķirības starp struktūru un savienību C:
Struktūra | savienība |
---|---|
Struktūras izmērs ir vienāds vai lielāks par visu tās locekļu kopējo izmēru. | Arodbiedrības lielums ir tās lielākā biedra lielums. |
Struktūra var saturēt datus vairākos elementos vienlaikus. | Tikai viens dalībnieks vienlaikus var saturēt datus. |
Tas tiek deklarēts, izmantojot struct atslēgvārdu. | Tas tiek deklarēts, izmantojot savienības atslēgvārdu. |
Bieži uzdotie jautājumi par C savienībām
1. Kāds ir dotās savienības lielums?
union un { int a; int arr[20]; }>
Atbilde: Dotās savienības izmērs ir 20 x 4 baiti = 80 baiti. Pat ja masīvs ir līdzīgu datu elementu kolekcija, C kompilators to uzskata par vienu entītiju.
2. Vai mēs varam glabāt datus vairākās arodbiedrības biedros vienlaikus?
Nē. Mēs varam saglabāt datus tikai vienā dalībniekā vienlaikus. Piemēram, nākamajā C programmā gan x, gan y ir viena un tā pati atrašanās vieta. Ja mēs mainām x, mēs varam redzēt, ka izmaiņas tiek atspoguļotas 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;> }> |
>
>Izvade
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. Kādi ir arodbiedrību pieteikumi?
Apvienības var būt noderīgas daudzās situācijās, kad vēlamies izmantot vienu un to pašu atmiņu diviem vai vairākiem dalībniekiem. Piemēram, pieņemsim, ka mēs vēlamies ieviest bināro koka datu struktūru, kurā katram lapas mezglam ir dubultā datu vērtība, savukārt katram iekšējam mezglam ir norādes uz diviem bērniem, bet nav datu. Ja mēs to deklarējam šādi:
C
sql servera pivot
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
>
tad katram mezglam ir nepieciešami 16 baiti, un puse baitu tiek iztērēta katram mezgla veidam. No otras puses, ja mēs deklarējam mezglu kā šādu, mēs varam ietaupīt vietu.
C
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>