Peamine erinevus – struktuur vs liit C
Massiiv on C-keelega toetatud struktureeritud andmed. Sama tüüpi andmeelementide salvestamiseks saab kasutada massiivi. Kui on avaldus int-märkidena [10]; siis märgid on massiiv, kuhu saab salvestada kümme märki ja kõik need on täisarvud. Mõnikord on vaja salvestada erinevat tüüpi andmeelemendid samasse mälukohta. Näiteks võib töötajal olla töötaja ID, nimi, osakond, vanus jne. Neid on erinevat tüüpi andmetüüpe. Seetõttu on vaja meetodit erinevate andmeelementide salvestamiseks ühtse üksusena. C-struktuure ja liite kasutatakse erinevat tüüpi andmeelementide salvestamiseks samasse mälukohta. Struktuur ja liit on sarnased, kuid need erinevad peamiselt mälu eraldamise tõttu. Struktuurimuutuja salvestamiseks vajalik mälu on kõigi liikmete mälumahu liitmine. Ühenduse muutuja salvestamiseks vajalik mälu on liidu suurima elemendi jaoks vajalik mälu. See on peamine erinevus C-i struktuuri ja liidu vahel. Selles artiklis käsitletakse erinevust C-i struktuuri ja liidu vahel.
Mis on C-s struktuur?
Struktuur on kasutaja määratud andmetüüp C-s. See aitab kombineerida erinevat tüüpi andmeüksusi. Struktuur võib kujutada kirjeid. Õpilasel võib olla õpilase_tunnus, õpilase_nimi jne. Iga muutuja eraldi salvestamise asemel saab kõik need erinevad andmeüksused struktuuri abil kompaktselt moodustada. See on määratletud märksõna "struct" abil. Struktuuris on kõikidele selle liikmetele igal ajal juurdepääs. Järgmine loob tuletatud andmetüübi struktuuri Student.
struct Õpilane {
intstudent_id;
char õpilase_nimi[20];
};
Ül altoodud struktuuri puhul saab muutujaid deklareerida järgmiselt.
struktur Õpilane õpilane1, õpilane2, õpilane3;
Struktuuri liikmetele juurdepääsuks on kaks meetodit. Seda kasutades liikmeoperaatorit (.) ja struktuuri osuti operaatorit (->). Liikmetele pääseb juurde, kasutades struktuuri_muutuja_nimi. liikme nimi. Kui programmeerija soovib pääseda juurde õpilase 2 nimele, saab ta kirjutada avalduse kujul printf(õpilane2.õpilase_nimi);
Vaadake allolevat programmi koos struktuuriga.
Joonis 01: C-programm struktuuridega
Vastav alt ül altoodud programmile on Student struktuur. See sisaldab õpilase_tunnust ja õpilase_nime. Põhiprogrammis deklareeritakse kaks struktuuritüüpi muutujat. Neid nimetatakse õpilane1 ja õpilane2. Student1 ID-le määratakse väärtus 1, kasutades liikmeoperaatorit kui student1.student_id=1. Nimi "Ann" on string. Seetõttu kopeeritakse see stringi kopeerimisfunktsiooni strcpy abil liikmesse õpilase_nimi. ID ja nimi määratakse student2-le sarnasel viisil. Lõpuks trükitakse need väärtused liikmeoperaatori abil.
Struktuurimuutuja salvestamiseks vajalik mälumaht on kõigi liikmete mälumahu summa. Student_id sisaldab 4 baiti ja õpilase_nimi 20 baiti (iga üks bait märgi kohta). 24 baiti kokku on struktuuri poolt nõutava mälumahu summa.
Mis on liit C-s?
Ühendus on kasutaja määratud andmetüüp C-s. See aitab salvestada erinevaid andmetüüpe samasse mälukohta. Raamatul võivad olla atribuudid, nagu raamatu_nimi, hind jne. Selle asemel, et luua muutujaid igaühe jaoks, saab liite abil liita kõik erinevad andmetüübid ühte ühikusse. Selle defineerimiseks kasutatakse märksõna „liit”. Järgmine loob tuletatud andmeühenduse raamatu.
liiduraamat{
märgi nimi[20];
topelthind;
};
Ül altoodud liidu jaoks saab muutujaid deklareerida järgmiselt.
liit Raamatu raamat1, raamat 2;
Ametiühingu liikmetele juurdepääsuks on kaks võimalust. Seda kasutades liikmeoperaatorit (.) ja struktuuri osuti operaatorit (->). Liikmetele pääseb juurde kasutades liidu_muutuja_nimi. liikme nimi. Kui programmeerija soovib pääseda juurde raamatu1 nimele, saab ta kirjutada avalduse kujul printf(raamat1.nimi);
Vaadake allolevat programmi ametiühinguga.
Joonis 02: C-programm, mis kasutab ühendust
Vastav alt ül altoodud programmile on Raamat liit. Book1 on union tüüpi muutuja. Nimele ja hinnale on määratud väärtused. Ametiühingus on korraga juurdepääs ainult ühele selle liikmele ja kõigil teistel liikmetel on prügiväärtused. ID väärtust ei prindita õigesti, kuid hinna väärtus prinditakse õigesti.
Joonis 03: Muudetud C-programm koos ühendusega
Vastav alt ül altoodud programmile on Book liit. Book1 ja book2 on liidu tüüpi muutujad. Esiteks määratakse raamat1 nime väärtus ja see prinditakse. Seejärel määratakse raamat2 nime väärtus ja see prinditakse. Kõik liikmed prindivad õigesti, kuna korraga kasutatakse ühte liiget. Ühenduse salvestamiseks vajalik mälu on liidu suurima elemendi jaoks vajalik mälu. Ül altoodud programmis on nimemuutujaks 20 baiti. See on hinnast suurem. Seega on liidu mälueraldus 20 baiti.
Millised on struktuuri ja liidu sarnasused C-s?
- Nii struktuur kui ka liit C-s on kasutaja määratud andmetüübid.
- Nii struktuuri kui ka ühendust C-s saab kasutada erinevate andmetüüpide salvestamiseks samasse mälukohta.
Mis vahe on C-s struktuuril ja liidul?
Struktuur vs liit C |
|
Struktuur on kasutaja määratud andmetüüp C-keeles, mis võimaldab kombineerida erinevat tüüpi andmeid. | Union on kasutaja määratud andmetüüp C-keeles, mis võimaldab kombineerida erinevat tüüpi andmeid. |
Juurdepääsetavus | |
Struktuuris pääseb kõikidele selle liikmetele igal ajal juurde. | Ametiühingus pääseb korraga juurde ainult ühele selle liikmele ja kõik teised liikmed sisaldavad prügiväärtusi. |
Mälu eraldamine | |
Struktuurimuutuja salvestamiseks vajalik mälu on kõigi liikmete mälumahu liitmine. | Ühendusmuutuja salvestamiseks vajalik mälu on liidu suurima elemendi jaoks vajalik mälu. |
Märksõna | |
Struktuuri määratlemiseks kasutatav märksõna on ‘struct’. | Ametiühingu määratlemiseks kasutatav märksõna on "liit". |
Kokkuvõte – struktuur vs liit C
Sama tüüpi andmeelementide salvestamiseks kasutatakse massiivi. Mõnikord on vaja samasse mälukohta salvestada erinevat tüüpi andmeelemente. Programmeerimiskeel C pakub selle ülesande täitmiseks struktuuri ja liidu. Mõlemad on kasutaja määratud andmetüübid. Struktuurimuutuja salvestamiseks vajalik mälu on kõigi liikmete mälumahu liitmine. Ühenduse muutuja salvestamiseks vajalik mälu on liidu suurima elemendi jaoks vajalik mälu. See on erinevus struktuuri ja liidu vahel C.