Odbory C (s příklady)

V tomto kurzu se dozvíte o odborech v programování C. Přesněji řečeno, jak vytvářet odbory, přistupovat k jejich členům a učit se rozdíly mezi odbory a strukturami.

Spojení je uživatelem definovaný typ podobný strukturám v C, s výjimkou jednoho klíčového rozdílu. Struktury přidělují dostatek místa k uložení všech svých členů, přičemž odbory přidělují prostor k uložení pouze největšího člena.

Jak definovat unii?

unionKlíčové slovo používáme k definování odborů. Zde je příklad:

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

Výše uvedený kód definuje odvozený typ union car.

Vytvořte sjednocující proměnné

Když je sjednocení definováno, vytvoří uživatelsky definovaný typ. Není však přidělena žádná paměť. Chcete-li přidělit paměť pro daný typ sjednocení a pracovat s ní, musíme vytvořit proměnné.

Tady je postup, jak vytváříme sjednocující proměnné.

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

Další způsob vytváření sjednocujících proměnných je:

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

V obou případech union carjsou vytvořeny sjednocující proměnné car1, car2 a sjednocující ukazatel car3 typu.

Získejte přístup k členům odborů

.Provozovatel používáme pro přístup k členům odborů. Pro přístup k proměnným ukazatele používáme také ->operátor.

Ve výše uvedeném příkladu

  • K přístupovému cenou car1, car1.priceje používán.
  • Pro přístup do cen za použití car3, a to buď (*car3).price, nebo car3->pricemohou být použity.

Rozdíl mezi odbory a strukturami

Pojďme si vzít příklad, který předvede rozdíl mezi odbory a 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; ) 

Výstup

 velikost spojení = 32 velikost struktury = 40 

Proč tento rozdíl ve velikosti sjednocujících a strukturních proměnných?

Zde je velikost sJob 40 bajtů, protože

  • velikost name(32)je 32 bytů
  • velikost salaryje 4 bajty
  • velikost workerNoje 4 bajty

Velikost uJob je však 32 bajtů. Je to proto, že velikost sjednocující proměnné bude vždy velikost jejího největšího prvku. Ve výše uvedeném příkladu je velikost jeho největšího prvku ( name(32)) 32 bajtů.

S odborem sdílejí všichni členové stejnou paměť .

Příklad: Přístup k členům Unie

 #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ýstup

 Plat = 0,0 Počet pracovníků = 100 

Chcete-li zjistit, kde se odbory používají, navštivte stránku Proč potřebujeme odbory C?

Zajímavé články...