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 union
besedo 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 car
tip 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.price
se uporablja. - Za dostop do cene lahko uporabite
car3
enega(*car3).price
ali pacar3->price
ga 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
salary
je 4 bajtov - velikost
workerNo
je 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?