V tomto výučbe sa dozviete o odboroch v programovaní v jazyku C. Konkrétnejšie, ako vytvárať odbory, pristupovať k ich členom a spoznávať rozdiely medzi odbormi a štruktúrami.
Zjednotenie je používateľom definovaný typ podobný štruktúram v jazyku C okrem jedného kľúčového rozdielu. Štruktúry vyhradzujú dostatok priestoru na uloženie všetkých svojich členov, zatiaľ čo odbory vyhradzujú priestor na uloženie iba najväčšieho člena.
Ako definovať úniu?
union
Kľúčové slovo používame na definovanie odborov. Tu je príklad:
union car ( char name(50); int price; );
Vyššie uvedený kód definuje odvodený typ union car
.
Vytvorte jednotné premenné
Keď je definované spojenie, vytvorí sa používateľom definovaný typ. Nie je však pridelená žiadna pamäť. Aby sme alokovali pamäť pre daný typ únie a pracovali s ňou, musíme vytvoriť premenné.
Tu je postup, ako vytvárame jednotné premenné.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Ďalším spôsobom vytvárania spojovacích premenných je:
union car ( char name(50); int price; ) car1, car2, *car3;
V obidvoch prípadoch sa vytvoria zjednocujúce premenné car1, car2 a zjednotený ukazovateľ car3 union car
typu.
Prístup k členom únie
.
Prevádzkovateľa používame na prístup k členom odborovej organizácie. Na prístup k premenným ukazovateľa používame tiež ->
operátor.
Vo vyššie uvedenom príklade
- K prístupovému cenou
car1
,car1.price
je používaný. - Pre prístup k cene pomocou
car3
,(*car3).price
alebocar3->price
možno použiť.
Rozdiel medzi odbormi a štruktúrami
Zoberme si príklad na demonštráciu rozdielov medzi odbormi a štruktúrami:
#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; )
Výkon
veľkosť spojenia = 32 veľkosť konštrukcie = 40
Prečo tento rozdiel vo veľkosti zjednotených a štruktúrnych premenných?
Tu je veľkosť sJob 40 bajtov, pretože
- veľkosť
name(32)
je 32 bajtov - veľkosť
salary
je 4 bajty - veľkosť
workerNo
je 4 bajty
Veľkosť uJob je však 32 bajtov. Je to preto, lebo veľkosť zjednocujúcej premennej bude vždy veľkosťou jej najväčšieho prvku. Vo vyššie uvedenom príklade je veľkosť jeho najväčšieho prvku ( name(32)
) 32 bajtov.
V rámci únie zdieľajú všetci členovia rovnakú pamäť .
Príklad: Prístup k členom únie
#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; )
Výkon
Plat = 0,0 Počet pracovníkov = 100
Ak sa chcete dozvedieť, kde sa používajú odbory, navštívte Prečo potrebujeme odbory C?