logo

C sąjungos

Sąjunga yra vartotojo apibrėžtas duomenų tipas C kalba, kuriame gali būti įvairių duomenų tipų elementų, kaip ir struktūrą. Tačiau skirtingai nei struktūros, visi C sąjungos nariai yra saugomi toje pačioje atminties vietoje. Dėl šios priežasties tik vienas narys gali saugoti duomenis tam tikrame egzemplioriuje.

sąjungos-c

Sąjungos sintaksė C

C sąjungos sintaksė gali būti suskirstyta į tris etapus, kurie yra tokie:



C sąjungos deklaracija

Šioje dalyje deklaruojame tik sąjungos šabloną, t.y. deklaruojame tik narių vardus ir duomenų tipus kartu su sąjungos pavadinimu. Deklaracijoje sąjungai atmintis neskirta.

 union union_name { datatype member1 ; datatype member2 ; ... };>

Atminkite, kad sąjungos deklaraciją visada turime baigti kabliataškiu.

Skirtingi Sąjungos kintamojo apibrėžimo būdai

Norėdami pradėti naudoti sąjungos narius, turime apibrėžti sąjungos tipo kintamąjį. Yra du metodai, kuriais galime apibrėžti sąjungos kintamąjį.



  1. Su Sąjungos deklaracija
  2. Po Sąjungos deklaracijos

1. Sąjungos kintamojo apibrėžimas su deklaracija

 union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>

2. Sąjungos kintamojo apibrėžimas po deklaravimo

 union union_name var1, var2, var3 ...;>

kur sąjungos_pavadinimas yra jau paskelbtos sąjungos pavadinimas.

Prisijunkite prie sąjungos narių

Mes galime pasiekti sąjungos narius naudodami (. ) taško operatorių, kaip ir struktūras.

 var1.member1 ;>

kur var1 yra sąjungos kintamasis ir narys1 yra sąjungos narys .



Aukščiau pateiktas prisijungimo prie sąjungos narių metodas taip pat tinka įdėtoms sąjungoms.

 var1.member1.memberA;>

Čia

  • var1 yra sąjungos kintamasis.
  • narys1 yra sąjungos narys.
  • narys A yra narys1 narys.

Sąjungos inicijavimas C

Sąjungos inicijavimas yra jos narių inicijavimas tiesiog priskiriant jai vertę.

 var1.member1 = some_value ;>

Čia reikia atkreipti dėmesį į vieną svarbų dalyką tik vienas narys gali turėti tam tikrą reikšmę tam tikru metu.

Sąjungos pavyzdys

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

>

>

Išvestis

The value stored in member1 = 15>

Sąjungos dydis

Sąjungos dydis visada bus lygus didžiausio masyvo nario dydžiui. Visi mažesnio dydžio elementai gali saugoti duomenis toje pačioje erdvėje be jokio perpildymo.

atminties paskirstymas c sąjungoje

Atminties paskirstymas C sąjungoje

1 pavyzdys: C programa sąjungos dydžiui rasti

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

>

>

sąrašo pavyzdys java
Išvestis

Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>

Skirtumas tarp C struktūros ir C sąjungos

Šioje lentelėje pateikiami pagrindiniai skirtumai tarp struktūros ir sąjungos C:

Struktūra sąjunga
Konstrukcijos dydis yra lygus arba didesnis už bendrą visų jos narių dydį. Sąjungos dydis prilygsta didžiausio jos nario dydžiui.
Struktūroje vienu metu gali būti kelių narių duomenų. Duomenų vienu metu gali turėti tik vienas narys.
Jis deklaruojamas naudojant struct raktinį žodį. Jis deklaruojamas naudojant sąjungos raktinį žodį.

DUK apie C sąjungas

1. Koks yra nurodytos sąjungos dydis?

union un { int a; int arr[20]; }>

Atsakymas: nurodytos sąjungos dydis yra 20 x 4 baitai = 80 baitų. Net jei masyvas yra panašių duomenų elementų rinkinys, C kompiliatorius jį laiko vienu objektu.

2. Ar galime vienu metu saugoti kelių sąjungos narių duomenis?

Ne. Vienu metu galime saugoti duomenis tik viename naryje. Pavyzdžiui, šioje C programoje x ir y turi tą pačią vietą. Jei pakeisime x, pamatysime, kad pokyčiai atsispindi y.

C

ascii lentelė java




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

>

>

Išvestis

After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>

3. Kokios yra sąjungų programos?

Sąjungos gali būti naudingos daugelyje situacijų, kai norime naudoti tą pačią atmintį dviem ar daugiau narių. Pavyzdžiui, tarkime, kad norime įdiegti dvejetainę medžio duomenų struktūrą, kurioje kiekvienas lapo mazgas turi dvigubą duomenų reikšmę, o kiekvienas vidinis mazgas turi nuorodas į du vaikus, bet neturi duomenų. Jei paskelbsime tai taip:

C




struct> NODE {> >struct> NODE* left;> >struct> NODE* right;> >double> data;> };>

>

>

tada kiekvienam mazgui reikia 16 baitų, o pusė baitų iššvaistoma kiekvienam mazgo tipui. Kita vertus, jei paskelbsime mazgą taip, kaip nurodyta toliau, galime sutaupyti vietos.

C




struct> NODE {> >bool> is_leaf;> >union> {> >struct> {> >struct> NODE* left;> >struct> NODE* right;> >} internal;> >double> data;> >} info;> };>

>

>