Nii struktuur kui liit on C-keeles kasutaja määratletud andmetüübid ja kontseptuaalselt samad, kuid siiski on need mõnes mõttes erinevad, näiteks viis, kuidas mälu nende liikmetele jaotatakse. Neid deklareeritakse sarnaselt, kuid need toimivad erinevalt. Need võimaldavad kasutajal ühendada erinevad andmetüübid ühe nime all. Kui struktuurimuutujate deklareerimisel kasutatakse iga liikme jaoks eraldi mälu asukohta, siis liitmuutuja erinevatel liikmetel on sama mälu asukoht. Uurime, mis on struktuuri ja liidu erinevus.

Erinevus struktuuri ja liidu vahel

Mis on struktuur?

Struktuur on lihtsalt üks kasutaja määratletud C-tüüpi andmetüüp, mis võimaldab kasutajal kombineerida erinevat tüüpi andmetüüpe mäluplokis ühte tüüpi. Struktuur võib sisaldada nii lihtsaid kui ka keerukaid üksteisega seotud andmetüüpe, mis muidu pole mõtet. Iga struktuuris olev liige saab oma mälu asukoha, nii et sellele saaks igal ajal juurde pääseda ja seda hankida.

Struktuuri kasutatakse siis, kui palju andmeid on vaja grupeerida, näiteks kataloog, mis salvestab paljude liikmete kohta teavet raamatusse või aadressiraamat, kuhu on salvestatud kogu teave ühe kontakti kohta - nimi, aadress, kontaktnumber ja nii edasi. Iga liikme aadress on kasvavas järjekorras, mis tähendab, et iga liikme mälu algab erinevate nihkeväärtustega. Ühe liikme väärtuse muutmine ei mõjuta teisi liikmeid.

Erinevate andmetüüpide struktuuri määratlemiseks ühe nime all kasutatakse märksõna „struct”. Näiteks kui soovite luua töötajate andmebaasi, peate töötaja nime, vanuse, telefoni ja palga üksikasjad salvestama ühe üksuse alla. Seda tehakse märksõnaga „struct”, mis seejärel ütleb kompilaatorile, et struktuur on deklareeritud.

struct töötaja {

stringi nimi;

nööri vanus;

keeltelefon;

nööripalk;

} emp1, emp2;

Siin on töötaja nimi struktuuri nimi ja kaks muutujat emp1 ja emp2 luuakse tüübist töötaja. Sulgudele peab järgnema semikoolon (;).

Struktuuri liikmetele pääseb juurde kahte tüüpi operaatoritel:

  1. Liikmeoperaator Struktuuri osuti operaator

Mis on liit?

See on C-s kasutatav spetsiaalne andmetüüp, mis võimaldab kasutajal salvestada eri tüüpi andmetüüpe samasse mälupesa. Liit on struktuuriga üsna sarnane ja selle saab määratleda asendades märksõna „struct” märksõnaga „union”. Liikmed katavad liidus üksteise mälu ja see on piisavalt suur, et see mahuks kõigile liikmetele.

Kui muutuja on seotud liitumisega, jaotab kompilaator mälu, võttes arvesse suurima mälu suurust, seega on liidu suurus võrdne suurima andmeliikme suurusega. Liitu saab määratleda paljude liikmetega, kuid ainult üks liige sisaldab väärtust igal ajahetkel.

Aadress on kõigi liidu liikmete jaoks sama, mis tähendab, et iga liige alustab sama nihke väärtusega. Ja ühe liikme väärtuse muutmine mõjutab teiste liikmete väärtusi. Liitu saab kasutada siis, kui soovite salvestada midagi, mis on üks mitmest andmetüübist.

ametiühingu töötaja {

char nimi [32];

int vanus;

ujukpalk;

};

Siin määratleb märksõna „liit” liidu, mis on üsna sarnane struktuuri deklareerimisega. Muutuja võib salvestada stringi väärtuse, milleks on „töötaja nimi”, täisarv, mis on „töötaja vanus”, või ujuk, mis tähistab „töötaja palka”.

Erinevus struktuuri ja liidu vahel

1. Märksõna

Märksõna 'struct' kasutatakse struktuuri määratlemiseks, märksõna 'union' määratlemiseks kasutatakse liit.

2. Mälu eraldamine

Struktuuri liikmetele eraldatakse eraldi mäluruum ja liikmetel on erinevad aadressid, mis ei jaga mälu. Teisest küljest jagab liit kõigile oma liikmetele sama mäluruumi, seega eraldatakse jagatud mälu asukoht.

3. Liikme juurdepääs

Liit salvestab kõigile oma liikmetele korraga ühe väärtuse, muutes juurdepääsu ainult ühele liikmele korraga. Ehkki struktuuri saab salvestada mitu väärtust, saab igale liikme väärtusele juurde pääseda ja seda igal ajal hankida.

4. Suurus

Struktuuri suurus on võrdne kõigi või enamate liikmete suuruse summaga, samas kui liidu suurus on võrdne suurima suurusega liikme suurusega.

5. Initsialiseerimine

Struktuuris saab mitu liiget initsialiseerida korraga, samas kui liidus saab selle tüübi väärtusega lähtestada ainult esimese liikme.

5. väärtus

Struktuur mahutab kõigi liikmete erinevad väärtused ja ühe liikme väärtuse muutus ei mõjuta teiste liikmete väärtusi. Kui ametiühing säilitab kõigi oma liikmete jaoks sama väärtust, mõjutab ühe liikme väärtuse muutus teise väärtust.

Struktuur vs liit

StruktuurLiit
Struktuuri määratlemiseks kasutatakse struktureeritud märksõna.Liidu märksõna kasutatakse liidu määratlemiseks.
Liikmed ei jaga mälu struktuuris.Liikmed jagavad mäluruumi liidus.
Mis tahes liikme saab struktuuri igal ajal alla laadida.Ametiühingusse pääseb korraga ainult ühele liikmele.
Mitu struktuuri liiget saab korraga lähtestada.Alustada saab ainult esimese liikmega.
Konstruktsiooni suurus on võrdne iga liikme suuruse summaga.Liidu suurus võrdub suurima liikme suurusega.
Ühe liikme muutuv väärtus ei mõjuta teise väärtust.Ühe liikme väärtuse muutus mõjutab teiste liikmete väärtusi.
Kõigi liikmete jaoks salvestatakse erinevad väärtused.Kõigil liikmetel on sama väärtus.

Kokkuvõte

  • Nii struktuur kui liit on C-is kasutaja määratletud andmetüübid, mis on funktsionaalselt ja kontseptuaalselt samad, kuid on mõnes mõttes üsna erinevad. Mõlemad sisaldavad eri andmetüüpide muutujaid, kuid muutujate deklareerimiseks ja liikmetele juurdepääsu saamiseks kasutavad nad sama süntaksi. Kui struktuur on määratletud märksõnaga "struct", siis liit on määratletud märksõnaga "union". Iga liige saab struktuuris eraldi mälupesa, samas kui liidus on kogu mäluruum sama suurima liikmega. Kõik liikmed jagavad liidus sama mäluruumi. Struktuuris pääseb juurde suvalisele jada suvalisele liikmele, liidus pääseb juurde ainult sellele muutujale, mille väärtus on hiljuti salvestatud.

Viited

  • Kanetkar, Yashavant. Olgem C. New Delhi: BPB väljaanded, 2002. Trükk
  • Kanetkar, Yashavant. Olgem C. New Delhi: BPB väljaanded, 2002. Trükk
  • Kuningas, K.N. C programmeerimine: kaasaegne lähenemine. New York: W.W. Norton & Company, 1996. Trükk
  • Griffiths, David ja Dawn Griffiths. Esimene juht C. Sebastopol: O’Reilly Media, 2011. Trükk
  • Pildikrediit: https://stackoverflow.com/questions/3921931/how-to-visualise-a-graph-of-c-structs-that-contain-point-to-one-another