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.
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:
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'..
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 | 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. |