Massiiv on C-keele toetatud 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 need kõik on täisarvud. Mõnikord nõutakse eri tüüpi andmeelementide salvestamist samasse mälupesa. Näiteks võib töötajal olla töötaja ID, nimi, osakond, vanus jne. Neid on erinevat tüüpi andmeid. Seetõttu on vaja meetodit erinevate andmeelementide salvestamiseks ühe ühikuna. C-s olevaid struktuure ja liite kasutatakse erinevat tüüpi andmeelementide hoidmiseks samas mäluasukohas. Struktuur ja liit on sarnased, kuid eristuvad peamiselt mälu eraldamise tõttu. Struktuurmuutuja salvestamiseks vajalik mälu on kõigi liikmete mälumahu summeerimine. Liitmuutuja salvestamiseks vajalik mälu on liidus suurima elemendi jaoks vajalik mälu. See on peamine erinevus Selles artiklis käsitletakse erinevust struktuuri ja liitumise vahel C-s.
1. Ülevaade ja peamised erinevused
2. Mis on struktuur C-s?
3. Mis on liit C-s
4. Struktuuri ja liidu sarnasused C-s
5. Kõrvuti võrdlus - struktuur vs liit tabelis C tabelis
6. Kokkuvõte
Struktuur on kasutaja määratletud andmetüüp C-s. See aitab kombineerida erinevat tüüpi andmeühikuid. Struktuur võib esindada kirjeid. Õpilasel võib olla õpilase_nimi, õpilase_nimi jne. Selle asemel, et iga muutujat eraldi hoida, saab need erinevad andmeüksused struktuuri abil kompaktseks ühendada. Selle määratlemiseks kasutatakse märksõna 'struct'. Struktuuris pääseb kõigile selle liikmetele juurde igal ajal. Järgnev loob tuletatud andmetüübi struct Student.
struct Student
intstudent_id;
char õpilase_nimi [20];
;
Ülaltoodud struktuuri jaoks saab muutujad deklareerida järgmiselt.
struct Õpilane1, õpilane2, õpilane3;
Struktuuri liikmetele juurdepääsu saamiseks on kaks meetodit. See tähendab liikmeoperaatori (.) Ja struktuuri osuti-operaatori (->) kasutamist. Liikmetele pääseb juurde, kasutades struktuuri muutuja_nimi. liikme nimi. Kui programmeerija soovib tutvuda õpilase 2 nimega, saab ta avalduse kirjutada printf (student2.student_namename);
Vaadake allolevat programmi koos struktuuriga.
Joonis 01: C-programm koos struktuuridega
Ülaltoodud programmi kohaselt on õpilane struktuur. See sisaldab õpilase_numbrit ja õpilase_nime. Põhiprogrammis deklareeritakse kaks struktuuritüübi muutujat. Neid nimetatakse õpilaseks1 ja õpilaseks2. Õpilase1 ID omistatakse väärtusega 1, kasutades liikmeoperaatorit kui õpilane1.õpilase_id = 1. Nimi “Ann” on string. Seetõttu kopeeritakse see õpilase_nimi liikmele, kasutades stringi kopeerimise funktsiooni strcpy. ID ja nimi omistatakse õpilasele2 sarnaselt. Lõpuks prinditakse need väärtused liikmeoperaatori abil.
Struktuurmuutuja salvestamiseks vajalik mälumaht on kõigi liikmete mälumahu summa. Student_id sisaldab 4 baiti ja õpilase_nimi sisaldab 20 baiti (iga märgi jaoks üks bait). Kokku 24 baiti on struktuuri poolt nõutud mälumahu summa.
Liit on kasutaja määratletud andmetüüp C-s. See aitab salvestada erinevaid andmetüüpe samasse mälupesa. Raamatul võivad olla atribuudid, näiteks raamatu_nimi, hind jne. Selle asemel, et igaühe jaoks muutujaid luua, saab liitu kasutada kõigi erinevate andmetüüpide liitmiseks ühikuks. Selle määratlemiseks kasutatakse märksõna 'union'. Järgnev loob tuletatud andmeühenduste raamatu.
ametiraamat
char nimi [20];
topelt hind;
;
Ülaltoodud liidu puhul saab muutujad deklareerida järgmiselt.
liit Raamat raamat1, raamat2;
Liidu liikmetele juurdepääsu saamiseks on kaks meetodit. See tähendab liikmeoperaatori (.) Ja struktuuri osuti-operaatori (->) kasutamist. Liikmetele pääseb juurde, kasutades union_variable_name. liikme nimi. Kui programmeerija soovib juurdepääsu raamatu1 nimele, saab ta avalduse kirjutada printf (raamatu1.nimi);
Vaadake allolevat programmi ametiühinguga.
Joonis 02: C-programmiga liitprogramm
Ülaltoodud programmi kohaselt on Raamat liit. Book1 on tüübiliidu muutuja. Nimi ja hind on määratud väärtustega. Liidus pääseb korraga juurde ainult ühele liikmele ja kõigil teistel liikmetel on prügiväärtused. Id väärtus ei prindi õigesti, kuid hinna väärtus prindib korralikult.
Joonis 03: Modifitseeritud C-programm koos liitumisega
Ülaltoodud programmi kohaselt on Raamat liit. Book1 ja book2 on ametiühingu tüüpi muutujad. Esiteks omistatakse book1 nime väärtus ja see trükitakse. Siis omistatakse book2 nime väärtus ja see trükitakse. Kõik liikmed prindivad õigesti, kuna korraga kasutatakse ühte liiget. Liidu salvestamiseks vajalik mälu on liidu suurima elemendi jaoks vajalik mälu. Ülaltoodud programmis on nimemuutuja 20 baiti. See on hinnast suurem. Seega on liidu mälujaotus 20 baiti.
Struktuur vs liit C-s | |
Struktuur on C-keeles kasutaja määratletud andmetüüp, mis võimaldab eri tüüpi andmeid omavahel ühendada. | Union on C-keeles kasutaja määratletud andmetüüp, mis võimaldab eri tüüpi andmeid omavahel ühendada. |
Juurdepääsetavus | |
Struktuuris pääseb kõigile selle liikmetele juurde igal ajal. | Ametiühingusse pääseb korraga ainult ühele liikmele ja kõik ülejäänud liikmed sisaldavad prügiväärtusi. |
Mälu eraldamine | |
Struktuurmuutuja salvestamiseks vajalik mälu on kõigi liikmete mälumahu summeerimine. | Liitmuutuja salvestamiseks vajalik mälu on liidus suurima elemendi jaoks vajalik mälu. |
Märksõna | |
Struktuuri määratlemiseks kasutatakse märksõna "struct". | Liidu määratlemiseks kasutatakse märksõna 'liit'. |
Sama tüüpi andmeelementide salvestamiseks kasutatakse massiivi. Mõnikord on vaja salvestada eri tüüpi andmeelemente samasse mälupesa. C programmeerimiskeel pakub selle ülesande täitmiseks struktuuri ja liidu. Mõlemad on kasutaja määratletud andmetüübid. Struktuurmuutuja salvestamiseks vajalik mälu on kõigi liikmete mälumahu summeerimine. Liitmuutuja salvestamiseks vajalik mälu on liidus suurima elemendi jaoks vajalik mälu. See on erinevus struktuuri ja liitumise vahel C-s.
1.Punkt, juhendid. “Struktuurid C.-s”, juhendamispunkt, 15. august 2017. Saadaval siin
2.Punkt, juhendid. “Ametiühingud C-s” , Õppematerjalide punkt, 15. august 2017. Saadaval siin