logo

C odbory

Union je uživatelsky definovaný datový typ v jazyce C, který může obsahovat prvky různých datových typů stejně jako strukturu. Ale na rozdíl od struktur jsou všechny členy v unii C uloženy ve stejném paměťovém místě. Díky tomu může na dané instanci ukládat data pouze jeden člen.

odbory-v-c

Syntaxe Union v C

Syntaxi sjednocení v C lze rozdělit do tří kroků, které jsou následující:



C Prohlášení Unie

V této části deklarujeme pouze šablonu unie, to znamená, že spolu s názvem unie deklarujeme pouze jména členů a datové typy. V deklaraci není sjednocení přidělena žádná paměť.

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

Mějte na paměti, že deklaraci unie musíme vždy ukončit středníkem.

Různé způsoby, jak definovat unijní proměnnou

Abychom mohli začít používat členy unie, musíme definovat proměnnou typu unie. Existují dvě metody, pomocí kterých můžeme definovat sjednocenou proměnnou.



  1. S unijní deklarací
  2. Po unijní deklaraci

1. Definování unijní proměnné s deklarací

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

2. Definování unijní proměnné po deklaraci

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

kde název_odboru je název již deklarované unie.

Přístup členů Unie

Ke členům sjednocení můžeme přistupovat pomocí tečkového operátoru ( . ) stejně jako ke strukturám.

 var1.member1 ;>

kde var1 je sjednocovací proměnná a člen1 je člen svazu .



Výše uvedený způsob přístupu ke členům odboru funguje i pro vnořené odbory.

 var1.member1.memberA;>

Tady,

  • var1 je sjednocovací proměnná.
  • člen1 je členem svazu.
  • členA je členem member1.

Inicializace Union v C

Inicializace sjednocení je inicializace jeho členů pouhým přiřazením hodnoty.

 var1.member1 = some_value ;>

Zde je třeba poznamenat jednu důležitou věc pouze jeden člen může obsahovat nějakou hodnotu v dané instanci času.

Příklad Unie

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

The value stored in member1 = 15>

Velikost unie

Velikost sjednocení bude vždy rovna velikosti největšího člena pole. Všechny méně velké prvky mohou ukládat data do stejného prostoru bez přetečení.

alokace paměti v c union

Alokace paměti v C Union

Příklad 1: C program pro zjištění velikosti sjednocení

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;> }>

>

>

výhody a nevýhody technologie
Výstup

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

Rozdíl mezi C strukturou a C Union

Následující tabulka uvádí klíčový rozdíl mezi strukturou a sjednocením v C:

Struktura svaz
Velikost konstrukce je stejná nebo větší než celková velikost všech jejích členů. Velikost unie odpovídá velikosti jejího největšího člena.
Struktura může obsahovat data ve více členech současně. Pouze jeden člen může obsahovat data současně.
Deklaruje se pomocí klíčového slova struct. Deklaruje se pomocí klíčového slova union.

Často kladené otázky o odborech C

1. Jaká je velikost daného svazku?

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

Odpověď: Velikost daného sjednocení je 20 x 4 bajty = 80 bajtů. I když je pole kolekcí podobných datových prvků, je kompilátorem C považováno za jedinou entitu.

2. Můžeme ukládat data ve více členech odborů současně?

Ne. Můžeme ukládat data pouze v jednom členu současně. Například v následujícím programu v C sdílejí x i y stejné umístění. Pokud změníme x, můžeme vidět, že se změny projeví 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ýstup

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

3. Jaké jsou aplikace odborů?

Odbory mohou být užitečné v mnoha situacích, kdy chceme použít stejnou paměť pro dva nebo více členů. Předpokládejme například, že chceme implementovat datovou strukturu binárního stromu, kde každý listový uzel má dvojitou datovou hodnotu, zatímco každý vnitřní uzel má ukazatele na dva potomky, ale žádná data. Pokud to prohlásíme jako:

C




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

>

není null v js
>

pak každý uzel vyžaduje 16 bajtů, přičemž polovina bajtů je ztracena pro každý typ uzlu. Na druhou stranu, pokud deklarujeme uzel jako následující, můžeme ušetřit místo.

C




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

>

>