In deze tutorial leer je over vakbonden in C-programmering. Meer specifiek, hoe u vakbonden opricht, toegang krijgt tot haar leden en de verschillen tussen vakbonden en structuren leert kennen.
Een unie is een door de gebruiker gedefinieerd type dat lijkt op structs in C, met uitzondering van één belangrijk verschil. Structs wijzen voldoende ruimte toe om al hun leden op te slaan, terwijl vakbonden de ruimte toewijzen om alleen het grootste lid op te slaan.
Hoe definieer je een vakbond?
We gebruiken het union
sleutelwoord om vakbonden te definiëren. Hier is een voorbeeld:
union car ( char name(50); int price; );
De bovenstaande code definieert een afgeleid type union car
.
Maak vakbondsvariabelen
Wanneer een unie is gedefinieerd, wordt een door de gebruiker gedefinieerd type gemaakt. Er is echter geen geheugen toegewezen. Om geheugen voor een bepaald vakbondstype toe te wijzen en ermee te werken, moeten we variabelen maken.
Hier is hoe we vakbondsvariabelen maken.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Een andere manier om vakbondsvariabelen te creëren is:
union car ( char name(50); int price; ) car1, car2, *car3;
In beide gevallen worden de vakbondsvariabelen auto1, auto2 en een vakbondswijzer auto3 van het union car
type gemaakt.
Toegang tot leden van een vakbond
We gebruiken de .
operator om toegang te krijgen tot leden van een vakbond. Om toegang te krijgen tot pointervariabelen, gebruiken we ook de ->
operator.
In het bovenstaande voorbeeld
- Om toegang te krijgen tot de prijs voor
car1
,car1.price
wordt gebruikt. - Om toegang te krijgen tot de prijs met behulp van
car3
,(*car3).price
ofcar3->price
kan worden gebruikt.
Verschil tussen vakbonden en structuren
Laten we een voorbeeld nemen om het verschil tussen vakbonden en structuren aan te tonen:
#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; )
Uitvoer
grootte van unie = 32 grootte van structuur = 40
Waarom dit verschil in grootte van vakbonds- en structuurvariabelen?
Hier is de grootte van sJob 40 bytes omdat
- de grootte van
name(32)
is 32 bytes - de grootte van
salary
is 4 bytes - de grootte van
workerNo
is 4 bytes
De grootte van uJob is echter 32 bytes. Dit komt doordat de grootte van een unievariabele altijd de grootte is van het grootste element. In het bovenstaande voorbeeld is de grootte van het grootste element, ( name(32)
), 32 bytes.
Met een vakbond delen alle leden dezelfde herinnering .
Voorbeeld: toegang tot vakbondsleden
#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; )
Uitvoer
Salaris = 0,0 Aantal werknemers = 100
Ga naar Waarom hebben we C-vakbonden nodig om te zien waar vakbonden worden gebruikt?