Š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 union
raktinį ž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 car
sukuriami 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.price
yra naudojama. - Norėdami pasiekti kainą naudojant
car3
, arba(*car3).price
arcar3->price
gali 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
salary
yra 4 baitai - dydis
workerNo
yra 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?