Odbory C (s príkladmi)

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?

unionKľúč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 cartypu.

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.priceje používaný.
  • Pre prístup k cene pomocou car3, (*car3).pricealebo car3->pricemož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ť salaryje 4 bajty
  • veľkosť workerNoje 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?

Zaujímavé články...