Rakenne ja unioni
Sekä rakenne että liitto ovat käyttäjän määrittämiä tietotyyppejä C-kielellä ja ovat käsitteellisesti samanlaisia, mutta ne ovat kuitenkin edelleen erilai- sia, kuten muistiin osoitettu jäsenille. Ne julistetaan samalla tavoin, mutta ne toimivat eri tavoin. Niiden avulla käyttäjä voi yhdistää eri tietotyypit yhden nimen alle. Kun jokaiselle jäsenelle käytetään erillistä muistipaikkaa ilmoittaessasi rakennemuuttujia, liikkeen muuttujan eri jäsenet jakavat saman muistipaikan. Katsotaanpa ero rakenteen ja liiton eron välillä.
Mikä on rakenne?
Rakenne on vain yksi C: n käyttäjäkohtainen tietotyyppi, jonka avulla käyttäjä voi yhdistää eri tyyppiset tietotyypit yhdeksi tyypiksi muistilohkossa. Rakenne voi sisältää sekä yksinkertaisia että monimutkaisia tietotyyppejä, jotka eivät ole järkeviä. Jokainen rakenteen sisällä oleva jäsen saa oman muistipaikkansa niin, että sitä voi käyttää ja hakea milloin tahansa.
Rakennetta käytetään, kun paljon tietoja tarvitaan ryhmittämällä kuten hakemisto, joka tallentaa tietoja useista jäsenistä kirjan tai osoitteen, joka tallentaa kaikki tiedot yhdestä yhteystiedosta - nimi, osoite, yhteystiedot ja niin edelleen. Jokaisen jäsenen osoite on nousevassa järjestyksessä, mikä tarkoittaa, että kunkin jäsenen muisti alkaa eri offset-arvoilla. Yhden jäsenen arvon muuttaminen ei vaikuta muihin jäseniin.
'Struct' -sanan avulla määritellään eri tietotyyppien rakenne yhdellä nimellä. Jos esimerkiksi haluat luoda työntekijätietokannan, sinun on tallennettava työntekijän nimi, ikä, puhelin ja palkkatiedot yhdestä kokonaisuudesta. Tämä tehdään avainsanalla "struct", joka kertoo kääntäjälle, että rakenne on ilmoitettu.
struct työntekijä {
merkkijonon nimi;
merkkijono;
merkkijono puhelin;
merkkijono;
} emp1, emp2;
Tässä "työntekijä" on rakenteen nimi ja kaksi muuttujaa "emp1" ja "emp2" luodaan tyyppi "työntekijä". Suljettavien kohokuvioiden on oltava puolipiste (;).
Rakenteen jäseniä voi käyttää kahdenlaisia operaattoreita:
- Jäsen operaattori
- Rakenteen osoittimen operaattori
Mikä on unioni?
Se on C: ssä käytettävä erityinen tietotyyppi, jonka avulla käyttäjä voi tallentaa erilaisia tietotyyppejä samassa muistipaikassa. Liitto on melko samanlainen kuin rakenne, ja se voidaan määritellä korvaamalla avainsana "struct" avainsanalla "union". Jäsenet peittävät toistensa muistin yhteenliittymässä, ja se on riittävän suuri sovittamaan kaikki jäsenensä.
Kun muuttuja liittyy unioniin, kääntäjä varaa muistin ottamalla huomioon suurimman muistin koon, joten liikkeen koko on yhtä suuri kuin suurin tietojäsen. Yhdistys voidaan määritellä useilla jäsenillä, mutta vain yksi jäsen sisältää arvot missä tahansa ajanhetkellä.
Osoite on sama kaikille liiton jäsenille, mikä tarkoittaa, että jokainen jäsen alkaa samassa offset-arvossa. Ja yhden jäsenen arvon muuttaminen vaikuttaa muiden jäsenten arvoihin. Liitettä voidaan käyttää, kun haluat tallentaa jotain, joka on yksi useista datatyypeistä.
työntekijä {
char nimi [32];
int ikä;
float -palkka;
};
Tässä avainsanalla "liitto" määritellään liitto, joka on melko samanlainen kuin rakenneilmoitus. Muuttuja voi joko tallentaa merkkijonon, joka on "työntekijän nimi", kokonaisluku, joka on "työntekijän ikä" tai float, joka edustaa työntekijän palkkaa.
Rakenteen ja unionin välinen ero
1. Avainsana
Avainsanaa "struct" käytetään määrittelemään rakennetta, kun taas "unionin" avainsana määritellään liitto.
2. Muistin jakaminen
Rakennuksen jäsenille on jaettu erillinen muistitila, ja jäsenillä on eri osoitteita, jotka eivät jakaa muistia. Toisaalta liitto jakaa saman muistitilan kaikille jäsenilleen, joten jaettu muistipaikka on allokoitu.
3. Jäsenoikeus
Liitto tallentaa kerrallaan yhden arvon kerrallaan, jotta kaikki sen jäsenet voivat käyttää vain yhtä jäsentä kerrallaan. Vaikka useita arvoja voidaan tallentaa rakenteeseen, joten jäsenarvoa voi käyttää ja hakea milloin tahansa.
4. Koko
Rakenteen koko on yhtä suuri kuin kaikkien jäsenten koon summa tai enemmän, kun taas liikkeen koko on yhtä suuri kuin suurimman koon jäsen.
5. Alustus
Rakennuksessa voidaan useita jäseniä alustaa heti, kun liittoon vain ensimmäinen jäsen voidaan alustaa sen tyypin arvolla.
5. Arvo
Rakenne voi tallentaa kaikkien jäsenten erilaiset arvot ja yhden jäsenen arvon muutos ei vaikuta muiden jäsenten arvoihin. Kun unioni tallentaa saman arvon kaikille jäsenilleen ja yhden jäsenen arvonmuutos vaikuttaa muiden arvojen arvoon.
Rakenne vs. unioni
Rakenne | liitto |
Rakennuksen määrittämiseen käytetään Struct-avainsanaa. | Unionin avainsanaa käytetään unionin määrittämiseen. |
Jäsenet eivät jakaa muistia rakenteessa. | Jäsenet jakavat muistitilan unionissa. |
Jokainen jäsen voi hakea milloin tahansa rakennetta. | Vain yksi jäsen voi käyttää kerrallaan yhdistyksessä. |
Useat rakenneosat voidaan alustaa heti. | Vain ensimmäinen jäsen voidaan alustaa. |
Rakenteen koko on yhtä suuri kuin kunkin jäsenen koon summa. | Liiton koko on yhtä suuri kuin suurimman jäsenen koko. |
Yhden jäsenen muuttuva arvo ei muuta toisen arvoa. | Yhden jäsenen arvon muutos vaikuttaa muiden jäsenten arvoihin. |
Tallentaa eri arvot kaikille jäsenille. | Sama arvo kaikille jäsenille. |
Yhteenveto
- Sekä rakenne että liitto ovat käyttäjäkohtaisia tietotyyppejä C: ssä, jotka ovat toiminnallisesti ja käsitteellisesti samoja mutta jotka ovat jossain määrin eroja.
- Molemmissa on erilaisten tietotyyppien muuttujia, mutta ne käyttävät samaa syntaksia muuttujien ilmoittamiselle ja jäsenille pääsemiseksi. Rakenne on määritelty "struct" -selinnällä, mutta unioni määritellään avainsanalla "union".
- Jokainen jäsen saa erillisen muistipaikan rakenteessa, kun taas yhdistyksessä koko muistitila vastaa suurinta kokoa. Kaikki jäsenet jakavat saman muistitilan unionissa.
- Jokainen sekvenssin jäsen voi päästä rakenteeseen, kun taas unionissa vain sellaista muuttujaa voidaan käyttää, jonka arvo on äskettäin tallennettu.