Sindikati C (z primeri)

V tej vadnici boste izvedeli več o sindikatih v programiranju C. Natančneje, kako ustvariti sindikate, dostopati do njihovih članov in se naučiti razlik med sindikati in strukturami.

Sindikat je uporabniško določen tip, podoben strukturam v C, razen ene ključne razlike. Strukture dodelijo dovolj prostora za shranjevanje vseh svojih članov, sindikati pa prostor za shranjevanje samo največjega člana.

Kako definirati zvezo?

Ključno unionbesedo uporabljamo za definiranje sindikatov. Tu je primer:

 union car ( char name(50); int price; ); 

Zgornja koda definira izpeljani tip union car.

Ustvari spremenljivke zvez

Ko je zveza definirana, ustvari uporabniško določen tip. Vendar ni dodeljen noben pomnilnik. Če želimo dodeliti pomnilnik za dani tip zveze in delati z njim, moramo ustvariti spremenljivke.

Evo, kako ustvarjamo spremenljivke zvez.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Drug način ustvarjanja zveznih spremenljivk je:

 union car ( char name(50); int price; ) car1, car2, *car3; 

V obeh primerih se ustvarijo spremenljivke zvez car1, car2 in union cartip kazalca zveze car3 .

Dostop do članov sindikata

Uporabljamo .operaterja članom dostopa iz sindikata. Za dostop do spremenljivk kazalca uporabljamo tudi ->operator.

V zgornjem primeru je

  • Za ceno dostopa za car1, car1.pricese uporablja.
  • Za dostop do cene lahko uporabite car3enega (*car3).priceali pa car3->pricega lahko uporabite.

Razlika med sindikati in strukturami

Vzemimo primer za prikaz razlike med sindikati in strukturami:

 #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; ) 

Izhod

 velikost zveze = 32 velikost strukture = 40 

Zakaj ta razlika v velikosti spremenljivk unije in strukture?

Tu je velikost sJob 40 bajtov, ker

  • velikost name(32)je 32 bajtov
  • velikost salaryje 4 bajtov
  • velikost workerNoje 4 bajtov

Vendar je velikost uJob 32 bajtov. To je zato, ker bo velikost spremenljivke zveze vedno velikost njenega največjega elementa. V zgornjem primeru je velikost njegovega največjega elementa ( name(32)) 32 bajtov.

S sindikatom imajo vsi člani isti spomin .

Primer: dostop do članov unije

 #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; )

Izhod

 Plača = 0,0 Število delavcev = 100 

Če želite izvedeti, kje se uporabljajo sindikati, obiščite Zakaj potrebujemo sindikate C?

Zanimive Članki...