Erinevus struktuuri ja liidu vahel

Nii struktuur kui ka liit on C-keeles kasutaja määratletud andmetüübid ja põhimõtteliselt samad, kuid siiski on need mõnes mõttes erinevad, näiteks viis, kuidas mälu nende liikmetele jaotatakse. Neid deklareeritakse sarnaselt, kuid nad 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 struktuuri ja liitumise erinevust detailselt.

Mis on struktuur?

Struktuur on lihtsalt teine ​​kasutaja määratletud andmetüüp C-s, 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 talletama töötaja nime, vanuse, telefoni ja palga üksikasjad ühe üksuse alla. Seda teeb märksõna '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
  2. 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 seda 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 selle liikmetele.

Kui muutuja on seotud liitumisega, jaotab kompilaator mälu suurima mälu suurust arvestades, nii et liit on 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

Struktuuri määratlemiseks kasutatakse märksõna 'struct', liidu 'määratlemiseks kasutatakse märksõna' union '.

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 võrdub 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 korraga initsialiseerida, samas kui liidus saab selle tüübi väärtusega initsialiseerida 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äärtuse, mõjutab ühe liikme väärtuse muutus teise väärtust.

Struktuur vs liit

Struktuur Liit
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 "liit".
  • 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 mis tahes suvalises järjestuses olevale liikmele, liidus pääseb juurde ainult sellele muutujale, mille väärtus on hiljuti salvestatud.