Ebben az oktatóanyagban megismerheti a C programozás szakszervezeteit. Pontosabban, hogyan lehet szakszervezeteket létrehozni, hozzáférni a tagjaihoz és megismerni a szakszervezetek és struktúrák közötti különbségeket.
Az unió egy felhasználó által definiált típus, amely egy kulcskülönbség kivételével hasonló a C-ben lévő struktúrákhoz. A Struktúrák elegendő helyet osztanak ki minden tagjának tárolására, ahol a szakszervezetek csak a legnagyobb tagot tárolják.
Hogyan definiálható az unió?
A union
kulcsszót a szakszervezetek meghatározásához használjuk . Íme egy példa:
union car ( char name(50); int price; );
A fenti kód egy származtatott típust határoz meg union car
.
Hozzon létre unióváltozókat
Az unió definiálásakor létrehoz egy felhasználó által definiált típust. Nincs memória. Ahhoz, hogy memóriát rendelhessünk egy adott uniótípushoz, és dolgozzunk vele, változókat kell létrehoznunk.
Így hozhatunk létre unióváltozókat.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Az unióváltozók létrehozásának másik módja:
union car ( char name(50); int price; ) car1, car2, *car3;
Mindkét esetben létrehozzák a car1, car2 és car3 union car
típusú unióváltozókat .
Szakszervezet tagjai
Az .
operátort egy szakszervezet tagjainak elérésére használjuk . A mutatóváltozók eléréséhez az ->
operátort is használjuk .
A fenti példában
- Hozzáférési árát
car1
,car1.price
alkalmazunk. - Az ár eléréséhez használja
car3
a(*car3).price
vagycar3->price
a lehetőséget.
Szakszervezetek és struktúrák közötti különbség
Vegyünk egy példát a szakszervezetek és a struktúrák közötti különbség bemutatására:
#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; )
Kimenet
az unió mérete = 32 a szerkezet mérete = 40
Miért ez a különbség az unió és a strukturális változók méretében?
Itt az sJob mérete 40 bájt, mert
- mérete
name(32)
32 bájt - mérete
salary
4 bájt - mérete
workerNo
4 bájt
Az uJob mérete azonban 32 bájt. Ez azért van, mert az unióváltozó mérete mindig a legnagyobb elemének a mérete lesz. A fenti példában legnagyobb elemének ( name(32)
) mérete 32 bájt.
A szakszervezetnél minden tagnak ugyanaz az emlékezete .
Példa: Hozzáférés az uniós tagokhoz
#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; )
Kimenet
Fizetés = 0,0 Dolgozók száma = 100
Ha meg szeretné tudni, hogy hol használják a szakszervezeteket, keresse fel a Miért van szükség C szakszervezetekre oldalunkat