Unioni on käyttäjän määrittämä tietotyyppi C-kielellä, joka voi sisältää rakenteen tavoin eri tietotyyppejä. Mutta toisin kuin rakenteet, kaikki C-liiton jäsenet on tallennettu samaan muistipaikkaan. Tästä johtuen vain yksi jäsen voi tallentaa tietoja kyseiseen esiintymään.

Unionin syntaksi C:ssä
Unionin syntaksi C:ssä voidaan jakaa kolmeen vaiheeseen, jotka ovat seuraavat:
C Unionin julistus
Tässä osassa ilmoitamme vain liiton mallipohjan, eli vain jäsenten nimet ja tietotyypit sekä liiton nimet. Ilmoituksessa liitolle ei ole varattu muistia.
union union_name { datatype member1 ; datatype member2 ; ... };>
Muista, että liittoilmoitus on aina päätettävä puolipisteellä.
Erilaisia tapoja määritellä unionimuuttuja
Meidän on määritettävä ammattiliiton tyyppinen muuttuja, jotta voimme alkaa käyttää liiton jäseniä. On olemassa kaksi menetelmää, joilla voimme määrittää liittomuuttujan.
- Unionin julistuksella
- Unionin julistuksen jälkeen
1. Unioni-muuttujan määrittäminen ilmoituksella
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Unioni-muuttujan määrittäminen ilmoituksen jälkeen
union union_name var1, var2, var3 ...;>
missä liiton_nimi on jo julistetun liiton nimi.
Pääsy liiton jäseniin
Voimme käyttää liiton jäseniä käyttämällä (. ) pisteoperaattoria aivan kuten rakenteita.
var1.member1 ;>
missä var1 on liiton muuttuja ja jäsen1 on liiton jäsen .
Yllä oleva tapa päästä liiton jäseniin toimii myös sisäkkäisissä liitoissa.
var1.member1.memberA;>
Tässä,
- var1 on liiton muuttuja.
- jäsen1 on liiton jäsen.
- jäsen A on jäsen1:n jäsen.
Unionin alustaminen C
Liiton alustus on sen jäsenten alustaminen yksinkertaisesti antamalla sille arvo.
var1.member1 = some_value ;>
Yksi tärkeä asia tässä on huomioida vain yksi jäsen voi sisältää jonkin arvon tietyllä hetkellä.
Esimerkki liitosta
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;> }> |
>
>Lähtö
The value stored in member1 = 15>
Unionin koko
Liiton koko on aina yhtä suuri kuin taulukon suurimman jäsenen koko. Kaikki pienemmät elementit voivat tallentaa tiedot samaan tilaan ilman ylivuotoa.

Muistin jakaminen C Unionissa
Esimerkki 1: C-ohjelma liiton koon selvittämiseksi
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;> }> |
>
>
merkkijono char javassaLähtö
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Ero C-rakenteen ja C Unionin välillä
Seuraavassa taulukossa luetellaan tärkeimmät erot C:n rakenteen ja liiton välillä:
Rakenne | liitto |
---|---|
Rakenteen koko on yhtä suuri tai suurempi kuin sen kaikkien jäsenten kokonaiskoko. | Liiton koko on sen suurimman jäsenen kokoinen. |
Rakenne voi sisältää tietoja useista jäsenistä samanaikaisesti. | Vain yksi jäsen voi sisältää tietoja samanaikaisesti. |
Se ilmoitetaan käyttämällä struct-avainsanaa. | Se ilmoitetaan käyttämällä union-avainsanaa. |
Usein kysytyt kysymykset C Unioneista
1. Mikä on kyseisen liiton koko?
union un { int a; int arr[20]; }>
V: Annetun liiton koko on 20 x 4 tavua = 80 tavua. Vaikka taulukko on kokoelma samanlaisia tietoelementtejä, C-kääntäjä pitää sitä yhtenä kokonaisuutena.
2. Voimmeko tallentaa tietoja useisiin liiton jäseniin samanaikaisesti?
Ei. Voimme tallentaa tietoja vain yhteen jäseneen samanaikaisesti. Esimerkiksi seuraavassa C-ohjelmassa sekä x että y jakavat saman sijainnin. Jos muutamme x:ää, voimme nähdä muutosten heijastuvan y:ään.
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;> }> |
>
>Lähtö
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. Mitkä ovat ammattiliittojen sovellukset?
Liitot voivat olla hyödyllisiä monissa tilanteissa, joissa haluamme käyttää samaa muistia kahdelle tai useammalle jäsenelle. Oletetaan esimerkiksi, että haluamme toteuttaa binääripuun tietorakenteen, jossa jokaisella lehtisolmulla on kaksinkertainen data-arvo, kun taas jokaisella sisäisellä solmulla on osoittimet kahteen lapseen, mutta ei dataa. Jos julistamme tämän seuraavasti:
C
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
mistä löydän selaimeni asetukset
>
silloin jokainen solmu vaatii 16 tavua, ja puolet tavuista menee hukkaan kullekin solmutyypille. Toisaalta, jos julistamme solmun seuraavasti, voimme säästää tilaa.
C
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>