Ero rakenteen ja unionin välillä

Sekä rakenne että liitto ovat käyttäjän määrittelemiä tietotyyppejä C-kielellä ja ovat käsitteellisesti samoja, mutta ne ovat kuitenkin tietyillä tavoin erilaisia, kuten tapa, jolla muisti kohdistetaan jäsenilleen. Ne julistetaan samalla tavalla, mutta ne toimivat eri tavalla. Niiden avulla käyttäjä voi yhdistää erilaisia ​​tietotyyppejä samaan nimeen. Vaikka jokaiselle jäsenelle käytetään erillistä muistin sijaintia rakennemuuttujien ilmoittamisessa, unionimuuttujan eri jäsenillä on sama muistipaikka. Tutkitaan ero rakenteen ja liiton välillä on yksityiskohta.

Mikä on rakenne?

Rakenne on vain toinen käyttäjän määrittelemä tietotyyppi C: ssä, jonka avulla käyttäjä voi yhdistää erityyppiset tietotyypit yhdeksi tyypiksi muistin lohkossa. Rakenne voi sisältää sekä yksinkertaisia ​​että monimutkaisia ​​toisiinsa liittyviä tietotyyppejä, jotka muuten eivät ole järkeviä. Jokainen rakenteen jäsen saa oman muistipaikan, jotta siihen voidaan päästä ja noutaa milloin tahansa.

Rakennetta käytetään, kun paljon tietoa tarvitaan ryhmittelyä, kuten hakemisto, joka tallentaa tietoja monista jäsenistä kirjassa, tai osoitekirja, joka tallentaa kaikki tiedot yhdestä yhteyshenkilöstä - nimi, osoite, yhteystiedot ja niin edelleen. Kunkin jäsenen osoite on nousevassa järjestyksessä, mikä tarkoittaa, että kunkin jäsenen muisti alkaa erilaisilla offset-arvoilla. Yhden jäsenen arvon muuttaminen ei vaikuta muihin jäseniin.

'Struct'-avainsanaa käytetään määrittelemään eri tietotyyppien rakenne yhdellä nimellä. Jos esimerkiksi haluat luoda työntekijöiden tietokannan, sinun on tallennettava työntekijän nimi, ikä, puhelin ja palkatiedot yhteen kokonaisuuteen. Tämä tehdään avainsanalla 'struct', joka sitten kertoo kääntäjälle, että rakenne on ilmoitettu.

struct työntekijä

merkkijono nimi;

merkkijono ikä;

merkkijono puhelin;

merkkijono palkka;

emp1, emp2;

Tässä 'työntekijä' on rakenteen nimi ja luodaan kaksi muuttujaa 'emp1' ja 'emp2', tyyppi 'työntekijä'. Sulkevien kiinnikkeiden jälkeen on oltava puolipiste (;).

Rakenteen jäseniin pääsee kahdentyyppisiin operaattoreihin:

  1. Jäsenoperaattori
  2. Rakenneosoittimen operaattori

Mikä on unioni??

Se on C: ssä käytetty erityinen tietotyyppi, jonka avulla käyttäjä voi tallentaa erityyppisiä tietotyyppejä samaan muistipaikkaan. Liitto on melko samanlainen kuin rakenne ja se voidaan määritellä korvaamalla avainsana 'struct' avainsanalla 'union'. Jäsenet peittävät toistensa muistin liitossa ja se on riittävän suuri sopimaan kaikille jäsenilleen.

Kun muuttuja liitetään unioniin, kääntäjä allokoi muistin ottamalla huomioon suurimman muistin koon, joten liitoksen koko on yhtä suuri kuin suurimman datajäsenen koko. Liitto voidaan määritellä monien jäsenten kanssa, mutta vain yksi jäsen sisältää arvon kullakin hetkellä.

Osoite on sama kaikille unionin jäsenille, mikä tarkoittaa, että jokainen jäsen alkaa samalla offset-arvolla. Ja yhden jäsenen arvon muuttaminen vaikuttaa muiden jäsenten arvoihin. Liittoa voidaan käyttää, kun haluat tallentaa jotain, joka on yksi monista tietotyypeistä.

ammattiliittolainen

char nimi [32];

int ikä;

kelluva palkka;

;

Tässä avainsana 'unioni' määrittelee liiton, joka on melko samanlainen kuin rakenteen ilmoittaminen. Muuttuja voi joko tallentaa merkkijonoarvon, joka on 'työntekijän nimi', kokonaislukuarvo, joka on 'työntekijän ikä', tai kelluva, joka edustaa 'työntekijän palkkaa'.

Ero rakenteen ja unionin välillä

1. Avainsana

Avainsanaa 'struct' käytetään määrittelemään rakenne, kun taas 'union'-avainsanaa käytetään määrittelemään unioni.

2. Muistin allokointi

Rakenteen jäsenille varataan erillinen muistitila ja jäsenillä on eri osoitteet, jotka eivät jaa muistia. Liitto puolestaan ​​jakaa saman muistitilan kaikille jäsenilleen, joten jaettu muistipaikka allokoidaan.

3. Jäsenten käyttöoikeudet

Liitto tallentaa yhden arvon kerrallaan kaikille jäsenilleen, jolloin pääsy vain yhdelle jäsenelle kerrallaan. Vaikka rakenteeseen voidaan tallentaa useita arvoja, joten mihin tahansa jäsenarvoon voidaan päästä ja noutaa milloin tahansa.

4. Koko

Rakenteen koko on yhtä suuri kuin kaikkien tai useamman jäsenen koon summa, kun taas liiton koko on yhtä suuri kuin suurimman kokoisen jäsenen koko.

5. Alustaminen

Rakenteessa voidaan alustaa useita jäseniä kerralla, kun taas liitossa vain ensimmäinen jäsen voidaan alustaa sen tyypin arvolla.

5. Arvo

Rakenne voi tallentaa kaikkien jäsenten eri arvot ja yhden jäsenen arvon muutoksella ei ole vaikutusta muiden jäsenten arvoihin. Vaikka liitto säilyttää saman arvon kaikille jäsenilleen, yhden jäsenen arvonmuutos vaikuttaa toisen arvoon.

Rakenne vs. unioni

Rakenne liitto
Struct-avainsanaa käytetään määrittelemään rakenne. Unionin avainsanaa käytetään liiton määrittelemiseen.
Jäsenet eivät jaa muistia rakenteessa. Jäsenet jakavat muistitilan liitossa.
Kuka tahansa jäsen voidaan noutaa milloin tahansa rakenteesta. Vain yksi jäsen pääsee kerrallaan ammattiliittoon.
Useat rakenteen jäsenet voidaan alustaa kerralla. Vain ensimmäinen jäsen voidaan alustaa.
Rakenteen koko on yhtä suuri kuin kunkin osan koko. Liiton koko on yhtä suuri kuin suurimman jäsenen koko.
Yhden jäsenen arvon muuttaminen ei vaikuta toisen arvoon. Yhden jäsenen arvonmuutos vaikuttaa muiden jäsenten arvoihin.
Tallentaa eri arvot kaikille jäsenille. Tallentaa saman arvon kaikille jäsenille.

Yhteenveto

  • Sekä rakenne että liitos ovat käyttäjän määrittelemiä tietotyyppejä C: ssä, jotka ovat toiminnallisesti ja käsitteellisesti samat, mutta ovat tietyiltä osin melko erilaisia.
  •  Molemmat sisältävät erityyppisiä muuttujia, mutta ne käyttävät samaa syntaksia muuttujien ilmoittamiseen ja jäsenten käyttämiseen. Vaikka rakenne on määritelty 'rakenteella' avainsanalla, liitto määritellään avainsanalla 'union'.
  • Jokainen jäsen saa erillisen muistipaikan rakenteessa, kun taas liitossa kokonaismuistitila vastaa suurinta kokoista jäsentä. Kaikilla jäsenillä on sama muistitila liitossa.
  • Minkä tahansa järjestyksen jäseniä voidaan käyttää rakenteessa, kun taas liitossa voidaan käyttää vain sitä muuttujaa, jonka arvo on äskettäin tallennettu.