C-ammattiliitot (esimerkkejä)

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 unionavainsanaa 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 carluodaan 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.pricekäytetään.
  • Voit käyttää hintaa käyttämällä car3joko (*car3).pricetai car3->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 salaryon 4 tavua
  • koko workerNoon 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?

Mielenkiintoisia artikkeleita...