C sąjungos (su pavyzdžiais)

Šioje pamokoje sužinosite apie C programavimo sąjungas. Tiksliau, kaip kurti sąjungas, pasiekti savo narius ir sužinoti skirtumus tarp sąjungų ir struktūrų.

Sąjunga yra vartotojo apibrėžtas tipas, panašus į C struktūras, išskyrus vieną pagrindinį skirtumą. Struktūrose skiriama pakankamai vietos visiems savo nariams laikyti, kai profsąjungos skiria erdvę tik didžiausiam nariui laikyti.

Kaip apibrėžti sąjungą?

Mes naudojame unionraktinį žodį apibrėždami sąjungas. Štai pavyzdys:

 union car ( char name(50); int price; ); 

Aukščiau pateiktas kodas apibrėžia išvestinį tipą union car.

Sukurkite sąjungos kintamuosius

Apibrėžus sąjungą, sukuriamas vartotojo apibrėžtas tipas. Tačiau atmintis neskiriama. Norėdami priskirti atmintį tam tikram sąjungos tipui ir dirbti su ja, turime sukurti kintamuosius.

Štai kaip mes sukuriame sąjungos kintamuosius.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Kitas būdas sukurti sąjungos kintamuosius yra:

 union car ( char name(50); int price; ) car1, car2, *car3; 

Abiem atvejais union carsukuriami tipo kintamieji car1, car2 ir sąjungos rodyklė car3 .

Prieiga prie profsąjungos narių

Mes naudojame .operatorių norėdami patekti į sąjungos narius. Norėdami pasiekti žymeklio kintamuosius, mes taip pat naudojame ->operatorių.

Ankstesniame pavyzdyje

  • Norėdami pasiekti kainą car1, car1.priceyra naudojama.
  • Norėdami pasiekti kainą naudojant car3, arba (*car3).pricear car3->pricegali būti naudojamas.

Skirtumas tarp sąjungų ir struktūrų

Paimkime pavyzdį, parodydami skirtumą tarp sąjungų ir struktūrų:

 #include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; ) 

Rezultatas

 sąjungos dydis = 32 struktūros dydis = 40 

Kodėl šis sąjungos ir struktūros kintamųjų dydžio skirtumas?

Čia „sJob“ dydis yra 40 baitų, nes

  • dydis name(32)yra 32 baitai
  • dydis salaryyra 4 baitai
  • dydis workerNoyra 4 baitai

Tačiau „uJob“ dydis yra 32 baitai. Taip yra todėl, kad sąjungos kintamojo dydis visada bus jo didžiausio elemento dydis. Ankstesniame pavyzdyje jo didžiausio elemento ( name(32)) dydis yra 32 baitai.

Su sąjunga visi nariai turi tą pačią atmintį .

Pavyzdys: Prieiga prie Sąjungos narių

 #include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )

Rezultatas

 Atlyginimas = 0,0 Darbuotojų skaičius = 100 

Norėdami sužinoti, kur naudojamos sąjungos, apsilankykite puslapyje Kodėl mums reikalingos C sąjungos?

Įdomios straipsniai...