logo

C Sindikati

Union je uporabniško definiran podatkovni tip v jeziku C, ki lahko vsebuje elemente različnih podatkovnih tipov tako kot struktura. Toda za razliko od struktur so vsi člani v uniji C shranjeni na isti pomnilniški lokaciji. Zaradi tega lahko samo en član hrani podatke na dani instanci.

sindikati-v-c

Sintaksa Union v C

Sintakso unije v C lahko razdelimo na tri korake, ki so naslednji:



C Izjava Unije

V tem delu deklariramo samo predlogo unije, tj. deklariramo samo imena članov in tipe podatkov skupaj z imenom unije. Uniji v deklaraciji ni dodeljen pomnilnik.

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

Ne pozabite, da moramo sindikalno izjavo vedno končati s podpičjem.

Različni načini definiranja spremenljivke unije

Za začetek uporabe članov unije moramo definirati spremenljivko tipa unije. Obstajata dve metodi, s katerima lahko definiramo unijsko spremenljivko.



  1. Z izjavo Unije
  2. Po deklaraciji Unije

1. Definiranje spremenljivke unije z deklaracijo

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

2. Definiranje spremenljivke unije po deklaraciji

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

kje ime_zveze je ime že razglašene zveze.

Dostop do članov sindikata

Do članov unije lahko dostopamo z uporabo ( . ) operatorja pike tako kot do struktur.

 var1.member1 ;>

kje var1 ali je spremenljivka unije in član1 ali je član sindikata .



Zgornja metoda dostopa do članov zveze deluje tudi za ugnezdene zveze.

 var1.member1.memberA;>

tukaj,

  • var1 je spremenljivka unije.
  • član1 je član sindikata.
  • članA je član member1.

Inicializacija unije v C

Inicializacija unije je inicializacija njenih članov s preprosto dodelitvijo vrednosti.

 var1.member1 = some_value ;>

Pomembno je opozoriti na to samo en član lahko vsebuje neko vrednost v danem trenutku.

Primer Unije

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

>

>

Izhod

The value stored in member1 = 15>

Velikost unije

Velikost unije bo vedno enaka velikosti največjega člana niza. Vsi manjši elementi lahko shranijo podatke v isti prostor brez prelivanja.

dodelitev pomnilnika v c uniji

Dodeljevanje pomnilnika v C Union

Primer 1: program C za iskanje velikosti unije

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

>

>

kako brati iz datoteke csv v javi
Izhod

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

Razlika med strukturo C in C Union

Naslednja tabela navaja ključne razlike med strukturo in unijo v C:

Struktura zveza
Velikost strukture je enaka ali večja od skupne velikosti vseh njenih članov. Velikost sindikata je velikost njegovega največjega člana.
Struktura lahko vsebuje podatke v več članih hkrati. Samo en član lahko vsebuje podatke hkrati.
Deklarira se s ključno besedo struct. Deklarira se s ključno besedo union.

Pogosta vprašanja o sindikatih C

1. Kakšna je velikost dane zveze?

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

Odgovor: Velikost dane unije je 20 x 4 bajtov = 80 bajtov. Tudi če je polje zbirka podobnih podatkovnih elementov, ga prevajalnik C obravnava kot eno samo entiteto.

2. Ali lahko hranimo podatke v več članih sindikata hkrati?

Ne. Podatke lahko hranimo samo v enem samem članu hkrati. Na primer v naslednjem programu C si tako x kot y delita isto lokacijo. Če spremenimo x, lahko vidimo, da se spremembe odražajo 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;> }>

če parafraziram Rudyarda Kiplinga
>

>

Izhod

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

3. Kakšne so vloge sindikatov?

Zveze so lahko uporabne v številnih situacijah, ko želimo uporabiti isti pomnilnik za dva ali več članov. Na primer, predpostavimo, da želimo implementirati binarno drevesno podatkovno strukturo, kjer ima vsako listno vozlišče dvojno podatkovno vrednost, medtem ko ima vsako notranje vozlišče kazalca na dva otroka, vendar ne podatkov. Če to deklariramo kot:

C




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

>

>

potem vsako vozlišče potrebuje 16 bajtov, pri čemer se polovica bajtov porabi za vsako vrsto vozlišča. Po drugi strani pa lahko prihranimo prostor, če vozlišče deklariramo kot naslednje.

C




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

>

>