Razlika med strukturo in unijo
Vsebina
C ++ omogoča vseh pet načinov, na katerih je jezik C ustvaril podatke po meri. Tih pet načinov so "struktura", "bitno polje", "zveza", "naštevanje", "typedef". V spodnjem članku bomo preučili razliko med strukturo in zvezo. Tako struktura kot zveza sta podatkovni vrsti vsebnika, ki lahko vsebujeta podatke poljubne vrste. Glavna razlika, ki razlikuje strukturo in združitev, je ta, da ima struktura ločeno pomnilniško mesto za vsakega od svojih članov, medtem ko imajo člani zveze isto pomnilniško mesto.
Razumejmo razliko med strukturo in zvezo ter primerjalno tabelo.
- Primerjalna tabela
- Opredelitev
- Ključne razlike
- Podobnosti
- Zaključek
Primerjalna tabela
Osnova za primerjavo | Struktura | Zveza |
---|---|---|
Osnovni | Ločeno pomnilniško mesto je dodeljeno vsakemu članu strukture. | Vsi člani zveze imajo isto pomnilniško mesto. |
Izjava | struct struct_name { tip element1; tip element2; . . } spremenljivka1, spremenljivka2, ...; | unije u_name { tip element1; tip element2; . . } spremenljivka1, spremenljivka2, ...; |
ključna beseda | Stru | zveza |
Velikost | Velikost strukture = vsota velikosti vseh članov podatkov. | Velikost unije = velikost največjih članov. |
Trgovinska vrednost | Shrani različne vrednosti za vse člane. | Hrani enako vrednost za vse člane. |
Ob času | Struktura shranjuje več vrednosti različnih elementov strukture. | Zveza shrani eno samo vrednost hkrati za vse člane. |
Način gledanja | Navedite enojni način za ogled vsake lokacije pomnilnika. | Omogočite več načinov za ogled iste lokacije v pomnilniku. |
Anonimna funkcija | Brez anonimne funkcije. | Lahko se prijavi anonimna zveza. |
Opredelitev strukture
Struktura je zbirka spremenljivk različnih vrst podatkov, ki jih navaja skupno ime. Spremenljivke v strukturi imenujemo "člani". Vsi člani strukture so privzeto "javni". Ko prijavite strukturo, ustvarite predlogo, ki jo lahko uporabite za ustvarjanje strukturnih objektov, ki si delijo isto organizacijo podatkovnih članov in funkcij članov. Pred izjavo strukture je vedno ključna beseda „struct“, ki prevajalcu sporoči, da je bila deklarirana struktura. Vzemimo primer.
Vzemimo primer.
zaposleni v strukturi {ime niza; string company_name; mesto niza; } emp1, emp2;
Tukaj razglasimo strukturo za shranjevanje informacij zaposlenih. Deklaracija se konča s podpičjem, kot deklaracija strukture je stavek in v C ++ stavek se konča s podpičjem.
Ime, ki je bilo dano strukturi, definira "tip" (v zgornjem primeru je ime strukture "zaposleni"). Spremenljivke teh vrst bi lahko nastale, kot zgoraj, ustvarili smo dve spremenljivki 'emp1' in 'emp2' tipa "zaposleni". V zgornjem primeru smo ustvarili spremenljivko 'structure' takoj po deklaraciji; izmenično bi jo bilo mogoče ustvariti ločeno.
strukturni zaposleni emp1, emp2; // struktura ključne besede ni obvezna.
Člani strukturne spremenljivke se lahko inicializirajo ali do njih dostopajo z uporabo operatorja dot (.).
emp1.name = "ashok";
Informacije, vsebovane v eni strukturni spremenljivki, je mogoče dodeliti drugi strukturni spremenljivki iste vrste, kot sledi.
emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // dodeljevanje vrednosti člana emp1 na emp2. cout <
Tu smo dodelili spremenljivko strukture 'emp1' to 'emp2', torej 'emp1' kopira vso vrednost svojih članov v ustreznega člana 'epm2'.
Član spremenljivke strukture se lahko prenese v funkcijo.
funct (emp1.city);
Celotno spremenljivko strukture lahko prenesemo v funkcijo tako z metodami, da pokličejo po vrednosti in pokličejo po referenci.
funt (emp1); // klicna funkcija s klicem z vrednostno metodo. . . void funct (strukturo zaposlenega emp) {// sprejemanje vrednosti članov emp1. cout <
Tukaj se sprememba vrednosti člana spremenljivke strukture ne bo odražala zunaj funkcije, saj se spremenljivka prenaša s klicem z vrednostno metodo. Naredimo isto stvar s klicem po referenčni metodi.
funt (& emp1); // klicna funkcija s klicem po referenčni metodi. . . void funct (strukturni zaposleni * emp) {// sprejemni naslov emp1. emp-> city = "Nur"; // spremenite vrednost člana (mesta) strukturne spremenljivke emp1. . }
Tu se strukturna spremenljivka prenese kot referenca, zato se sprememba vrednosti članov strukturne spremenljivke odraža tudi zunaj funkcije.
srtuct zaposleni * emp; // odklanjanje kazalca strukture zaposlenega tipa. emp = & emp1; // dodeljevanju naslova emp1 kazalcu. emp-> city // kazalec, ki dostopa do mesta članice emp1.
Ustvari se lahko tudi kazalec na strukturo; ima naslov spremenljivke strukture.
V strukturi je dovoljena inicializacija agregata, kadar definicija strukture ne vsebuje nobenega uporabniško definiranega konstruktorja ali virtualnih funkcij ali osnovnega razreda ali zasebnega ali zaščitenega polja.
int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Možno, ker struktura zaposlenega ne vsebuje nobene od zgoraj omenjenih stvari.
Opredelitev unije
Zveza je pomnilniška lokacija, ki jo delita dva ali več različnih vrst spremenljivk, deklariranih pod eno vrsto zveze. Ključna beseda, ki se uporablja za razglasitev zveze, je »unije«. V C ++ lahko zveza vsebuje funkcijo člana in spremenljivke. Vsi člani zveze so privzeto "javni". Izjava o sindikatu je podobna deklaraciji strukture.
zveza u_type {int x, char c; float f; } u1, u2;
Tu smo razglasili zvezo z imenom u_type. Člani u_type so 'x' celega tipa, 'c' znakovnega tipa in 'f' float tipa. Ustvarili smo tudi spremenljivke zveze 'u1' in 'u2', vrste 'u_type', takoj po izjavi zveze. Sindikalno spremenljivko lahko razglasimo tudi ločeno od deklaracije zveze.
int main () {union u_type u1, u2; // Ključna beseda zveza v C ++ ni obvezna. }
Dostop do članov zveze se lahko izvede z uporabo operaterja dot (.), Pred katerim je spremenljivka union in sledi članu te spremenljivke.
u1.x = 10;
Tako kot strukture tudi skupna inicializacija v uniji ni mogoča. Kot vemo, ima zveza isto mesto pomnilnika za vse svoje člane hkrati inicializirana je le ena spremenljivka in vsa spremenljivka se samodejno posodobi z inicializirano vrednostjo.
u1.x = 10; cout <
Če poskusite spremeniti vrednost katerega koli člana 'u1'. Drugi član bo samodejno posodobljen na to vrednost.
u1.c = 65; cout <
Prostor, ki je bil dodeljen sindikatu, je enak velikosti največjega člana zveze. Ker je bajt, dodeljen 'char', 1 bajt, 'int' je 4 bajta in 'float' je 4 bajta, zato je največja velikost 4 bajta. Torej, pomnilnik, dodeljen 'u1' in 'u2', je 4 bajt.
int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4
Kazalnik na zvezo je mogoče ustvariti tako kot v strukturi. Kazalec vsebuje naslov zveze.
zveza u_type * un; un = & u1; cout < Podobno kot strukturo lahko tudi zvezo na funkcije prenesemo z obema metodama, tj. Klic po vrednosti in klic po referenci. funkt (u1); // klicna funkcija s klicem z vrednostno metodo. . . void funct (zveza u_type un) {// sprejemanje vrednosti člana u1. cout < Zdaj pa pokličimo funkcijo s klicem po referenčni metodi. funct (& u1); // klicna funkcija s klicem po metodi refrence. . . void funct (zveza u_type un) {// sprejem naslova u1. un-> x = 20. } V C ++ obstaja posebna vrsta zveze, imenovana Anonimna unija. " Anonimna zveza ne more imeti imena tipa in nobene spremenljivke takšne zveze ni mogoče ustvariti. Prevajalniku je treba povedati le, da morajo njegove spremenljivke članice deliti isto lokacijo. Spremenljivko anonimne zveze lahko pošljete brez običajnega operaterja pike (.). int main () {union {// določi anonimno zvezo z imenom tipa. int x, char c; float f; }; x = 10; // skliceval spremenljivko unije z operaterjem dot cout < V anonimni zvezi ni dovoljena nobena članska funkcija, ne more vsebovati zasebnih ali zaščitenih podatkov, globalna anonimna zveza pa mora biti določena kot „statična“. Točke, ki si jih je treba zapomniti za običajno sindikalno deklaracijo. Obe strukturi in združevanju sta podatkovni tip vsebnika, ki vsebuje člana različnih vrst. Toda strukture se uporabljajo, kadar moramo za vse člane shraniti ločeno vrednost na ločeno pomnilniško mesto. Sindikati se uporabljajo, kadar je potrebna pretvorba tipa.
Podobnosti:
Zaključek: