logo

C odbory

Union je užívateľsky definovaný dátový typ v jazyku C, ktorý môže obsahovať prvky rôznych dátových typov rovnako ako štruktúru. Ale na rozdiel od štruktúr sú všetci členovia v únii C uložené na rovnakom pamäťovom mieste. Vďaka tomu môže v danej inštancii ukladať dáta iba jeden člen.

odbory-v-c

Syntax únie v C

Syntax spojenia v C môže byť rozdelená do troch krokov, ktoré sú nasledovné:



C Vyhlásenie únie

V tejto časti deklarujeme iba šablónu únie, t. j. deklarujeme iba mená členov a typy údajov spolu s názvom únie. V deklarácii nie je zväzku pridelená žiadna pamäť.

 union union_name { datatype member1 ; datatype member2 ; ... };>

Majte na pamäti, že vyhlásenie únie musíme vždy ukončiť bodkočiarkou.

Rôzne spôsoby definovania premennej únie

Musíme definovať premennú typu union, aby sme mohli začať používať členov odborov. Existujú dve metódy, pomocou ktorých môžeme definovať zjednotenú premennú.



  1. S deklaráciou Únie
  2. Po deklarácii Únie

1. Definovanie premennej únie s deklaráciou

 union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>

2. Definovanie premennej Únie po vyhlásení

 union union_name var1, var2, var3 ...;>

kde názov_odboru je názov už deklarovanej únie.

Prístup k členom únie

K členom únie môžeme pristupovať pomocou bodkového operátora ( . ) rovnako ako štruktúry.

 var1.member1 ;>

kde var1 je zväzová premenná a člen1 je člen zväzu .



Vyššie uvedený spôsob prístupu k členom únie funguje aj pre vnorené odbory.

 var1.member1.memberA;>

Tu,

  • var1 je zväzová premenná.
  • člen1 je členom zväzu.
  • členA je členom member1.

Inicializácia Union v C

Inicializácia zväzku je inicializácia jeho členov jednoduchým priradením hodnoty.

 var1.member1 = some_value ;>

Tu je potrebné poznamenať jednu dôležitú vec iba jeden člen môže v danom čase obsahovať nejakú hodnotu.

Príklad únie

C




// C Program to demonstrate how to use union> #include> // union template or declaration> union> un {> >int> member1;> >char> member2;> >float> member3;> };> // driver code> int> main()> {> >// defining a union variable> >union> un var1;> >// initializing the union member> >var1.member1 = 15;> >printf>(>'The value stored in member1 = %d'>,> >var1.member1);> >return> 0;> }>

>

>

Výkon

The value stored in member1 = 15>

Veľkosť únie

Veľkosť únie sa bude vždy rovnať veľkosti najväčšieho člena poľa. Všetky menej veľké prvky môžu ukladať údaje do rovnakého priestoru bez akéhokoľvek pretečenia.

alokácia pamäte v c union

Alokácia pamäte v C Union

Príklad 1: C program na nájdenie veľkosti zväzku

C




// C Program to find the size of the union> #include> // declaring multiple unions> union> test1 {> >int> x;> >int> y;> } Test1;> union> test2 {> >int> x;> >char> y;> } Test2;> union> test3 {> >int> arr[10];> >char> y;> } Test3;> // driver code> int> main()> {> >// finding size using sizeof() operator> >int> size1 =>sizeof>(Test1);> >int> size2 =>sizeof>(Test2);> >int> size3 =>sizeof>(Test3);> >printf>(>'Sizeof test1: %d '>, size1);> >printf>(>'Sizeof test2: %d '>, size2);> >printf>(>'Sizeof test3: %d'>, size3);> >return> 0;> }>

>

>

porovnať reťazec java
Výkon

Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>

Rozdiel medzi C štruktúrou a C Union

Nasledujúca tabuľka uvádza kľúčový rozdiel medzi štruktúrou a zjednotením v C:

Štruktúra únie
Veľkosť konštrukcie je rovnaká alebo väčšia ako celková veľkosť všetkých jej členov. Veľkosť únie zodpovedá veľkosti jej najväčšieho člena.
Štruktúra môže obsahovať údaje vo viacerých členoch súčasne. Údaje môže obsahovať iba jeden člen súčasne.
Deklaruje sa pomocou kľúčového slova struct. Deklaruje sa pomocou kľúčového slova union.

Časté otázky o odboroch C

1. Aká je veľkosť daného zväzku?

union un { int a; int arr[20]; }>

Odpoveď: Veľkosť daného spojenia je 20 x 4 bajty = 80 bajtov. Aj keď je pole súborom podobných dátových prvkov, kompilátor C ho považuje za jedinú entitu.

3D v Autocade

2. Môžeme ukladať údaje vo viacerých členoch odborov súčasne?

Nie. Môžeme ukladať údaje iba v jednom členovi súčasne. Napríklad v nasledujúcom programe C zdieľajú x aj y rovnaké umiestnenie. Ak zmeníme x, vidíme, že zmeny sa prejavia v y.

C




// C program to check if we can store data in multiple union> // members> #include> // Declaration of union is same as structures> union> test {> >int> x, y;> };> int> main()> {> >// A union variable t> >union> test t;> >t.x = 2;>// t.y also gets value 2> >printf>(>'After making x = 2: x = %d, y = %d '>, t.x,> >t.y);> >t.y = 10;>// t.x is also updated to 10> >printf>(>'After making y = 10: x = %d, y = %d '>, t.x,> >t.y);> >return> 0;> }>

>

>

Výkon

After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>

3. Aké sú aplikácie odborov?

Odbory môžu byť užitočné v mnohých situáciách, keď chceme použiť rovnakú pamäť pre dvoch alebo viacerých členov. Predpokladajme napríklad, že chceme implementovať binárnu stromovú dátovú štruktúru, kde každý listový uzol má dvojitú dátovú hodnotu, zatiaľ čo každý vnútorný uzol má ukazovatele na dva potomky, ale žiadne dáta. Ak to deklarujeme ako:

C




struct> NODE {> >struct> NODE* left;> >struct> NODE* right;> >double> data;> };>

>

>

potom každý uzol vyžaduje 16 bajtov, pričom polovica bajtov je premrhaná pre každý typ uzla. Na druhej strane, ak deklarujeme uzol ako nasledujúci, potom môžeme ušetriť miesto.

C




struct> NODE {> >bool> is_leaf;> >union> {> >struct> {> >struct> NODE* left;> >struct> NODE* right;> >} internal;> >double> data;> >} info;> };>

>

>