Tässä opetusohjelmassa opit C-ohjelmoinnin ammattiliitoista. Tarkemmin sanottuna kuinka luoda liittoja, päästä sen jäseniin ja oppia eroja liittojen ja rakenteiden välillä.
Unioni on käyttäjän määrittelemä tyyppi, joka on samanlainen kuin C: n rakenteet lukuun ottamatta yhtä keskeistä eroa. Struktorit osoittavat riittävästi tilaa kaikkien jäsentensa tallentamiseen, jos ammattiliitot varaavat tilaa vain suurimman jäsenen tallentamiseen.
Kuinka määritellä liitto?
Käytämme union
avainsanaa liittojen määrittelemiseen. Tässä on esimerkki:
union car ( char name(50); int price; );
Yllä oleva koodi määrittelee johdetun tyypin union car
.
Luo unionimuuttujia
Kun unioni on määritelty, se luo käyttäjän määrittelemän tyypin. Muistia ei kuitenkaan ole varattu. Jotta voimme jakaa muistia tietylle liitostyypille ja työskennellä sen kanssa, meidän on luotava muuttujia.
Näin luomme liitemuuttujia.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Toinen tapa luoda unionimuuttujia on:
union car ( char name(50); int price; ) car1, car2, *car3;
Molemmissa tapauksissa union car
luodaan tyyppiset liitemuuttujat car1, car2 ja unioniosoitin car3 .
Liittymän jäsenet
Käytämme .
operaattoria pääsemään liittoon. Osoitinmuuttujien käyttämiseen käytämme myös ->
operaattoria.
Yllä olevassa esimerkissä
- Pääsy hintaan
car1
,car1.price
käytetään. - Voit käyttää hintaa käyttämällä
car3
joko(*car3).price
taicar3->price
.
Ero ammattiliittojen ja rakenteiden välillä
Otetaan esimerkki eron osoittamiseksi liittojen ja rakenteiden välillä:
#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; )
Tuotos
liiton koko = 32 rakenteen koko = 40
Miksi tämä ero liiton ja rakennemuuttujien koossa?
Tässä sJobin koko on 40 tavua, koska
- koko
name(32)
on 32 tavua - koko
salary
on 4 tavua - koko
workerNo
on 4 tavua
UJobin koko on kuitenkin 32 tavua. Se johtuu siitä, että unionimuuttujan koko on aina sen suurimman elementin koko. Yllä olevassa esimerkissä sen suurimman elementin ( name(32)
) koko on 32 tavua.
Unionin kanssa kaikilla jäsenillä on sama muisti .
Esimerkki: Pääsy unionin jäseniin
#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; )
Tuotos
Palkka = 0,0 Työntekijöiden lukumäärä = 100
Jos haluat oppia, missä liittoja käytetään, käy osoitteessa Miksi tarvitsemme C-liittoja?