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?
union
Klíč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 car
jsou 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.price
je používán. - Pro přístup do cen za použití
car3
, a to buď(*car3).price
, nebocar3->price
mohou 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
salary
je 4 bajty - velikost
workerNo
je 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?