zveza lahko definiramo kot uporabniško definiran podatkovni tip, ki je zbirka različnih spremenljivk različnih podatkovnih tipov na isti pomnilniški lokaciji. Unijo lahko definiramo tudi kot več članov, vendar lahko samo en član vsebuje vrednost v določenem trenutku.
Union je uporabniško definiran podatkovni tip, vendar za razliko od struktur delijo isto pomnilniško lokacijo.
alfa beta primer obrezovanja
Razumejmo to s primerom.
struct abc { int a; char b; }
Zgornja koda je uporabniško definirana struktura, ki je sestavljena iz dveh členov, tj. 'a' tipa int in 'b' vrste značaj . Ko smo preverili naslova 'a' in 'b', smo ugotovili, da sta njuna naslova različna. Zato sklepamo, da si člani v strukturi ne delijo iste pomnilniške lokacije.
Ko smo definirali unijo, smo ugotovili, da je unija definirana na enak način kot je definirana struktura, vendar je razlika v tem, da se ključna beseda union uporablja za definiranje podatkovnega tipa union, medtem ko se ključna beseda struct uporablja za definiranje strukture. Zveza vsebuje podatkovna člana, tj. 'a' in 'b', ko smo preverili naslova obeh spremenljivk, smo ugotovili, da imata obe enaka naslova. To pomeni, da si člani unije delijo isto pomnilniško lokacijo.
Oglejmo si slikovni prikaz dodeljevanja pomnilnika.
Spodnja slika prikazuje slikovno predstavitev strukture. Struktura ima dva člana; tj. ena je celoštevilskega tipa, druga pa znakovnega tipa. Ker je 1 blok enak 1 bajtu; zato bodo spremenljivki 'a' dodeljeni 4 bloki pomnilnika, medtem ko bo spremenljivki 'b' dodeljen 1 blok pomnilnika.
Spodnja slika prikazuje slikovni prikaz članov sindikata. Obe spremenljivki si delita isto pomnilniško lokacijo in imata isti začetni naslov.
css za prelom besedila
V zvezi si bodo člani delili pomnilniško lokacijo. Če poskušamo spremeniti katerega koli člana, se bo to odrazilo tudi na drugem članu. Razumejmo ta koncept na primeru.
union abc { int a; char b; }var; int main() { var.a = 66; printf(' a = %d', var.a); printf(' b = %d', var.b); }
V zgornji kodi ima zveza dva člana, tj. 'a' in 'b'. 'Var' je spremenljivka tipa union abc. V glavni () metodi dodelimo 66 spremenljivki 'a', tako da bo var.a izpisala 66 na zaslonu. Ker si tako 'a' kot 'b' delita pomnilniško lokacijo, var.b bo natisnil ' B ' (ascii koda 66).
Odločitev o velikosti sindikata
Velikost sindikata temelji na velikosti največjega člana sindikata.
Razumejmo skozi primer.
union abc{ int a; char b; float c; double d; }; int main() { printf('Size of union abc is %d', sizeof(union abc)); return 0; }
Kot vemo, je velikost int 4 bajte, velikost char je 1 bajt, velikost float je 4 bajte in velikost double je 8 bajtov. Ker dvojna spremenljivka zaseda največ pomnilnika med vsemi štirimi spremenljivkami, bo v pomnilniku dodeljenih skupno 8 bajtov. Zato bi bil rezultat zgornjega programa 8 bajtov.
Dostopanje do članov unije s kazalci
Do članov unije dostopamo prek kazalcev z uporabo (->) puščičnega operatorja.
Razumejmo skozi primer.
python oz
#include union abc { int a; char b; }; int main() { union abc *ptr; // pointer variable declaration union abc var; var.a= 90; ptr = &var; printf('The value of a is : %d', ptr->a); return 0; }
V zgornji kodi smo ustvarili spremenljivko kazalca, tj. *ptr, ki shranjuje naslov spremenljivke var. Zdaj lahko ptr dostopa do spremenljivke 'a' z uporabo operatorja (->). Zato bi bil rezultat zgornje kode 90.
Zakaj potrebujemo sindikate C?
Razmislite o enem primeru, da boste razumeli potrebo po sindikatih C. Vzemimo trgovino z dvema artikloma:
- knjige
- Srajce
Lastniki trgovin želijo shraniti zapise o zgoraj omenjenih dveh predmetih skupaj z ustreznimi informacijami. Na primer, knjige vključujejo naslov, avtorja, število strani, ceno, majice pa vključujejo barvo, dizajn, velikost in ceno. Lastnost 'cena' je skupna pri obeh postavkah. Lastnik trgovine želi shraniti lastnosti in nato, kako bo shranil zapise.
Sprva so se odločili, da zapise shranijo v strukturi, kot je prikazano spodaj:
struct store { double price; char *title; char *author; int number_pages; int color; int size; char *design; };
Zgornja struktura je sestavljena iz vseh elementov, ki jih lastnik trgovine želi shraniti. Zgornja struktura je popolnoma uporabna, vendar je cena skupna pri obeh artiklih, ostali artikli pa so posamični. Lastnosti, kot so cena, *naslov, *avtor in število_strani, pripadajo knjigam, medtem ko barva, velikost, *dizajn pripadajo majici.
Poglejmo, kako lahko dostopamo do članov strukture .
int main() { struct store book; book.title = 'C programming'; book.author = 'Paulo Cohelo'; book.number_pages = 190; book.price = 205; printf('Size is : %ld bytes', sizeof(book)); return 0; }
V zgornji kodi smo ustvarili spremenljivko tipa trgovina . Vrednosti smo dodelili spremenljivkam, naslovu, avtorju, številu_strani, ceni, vendar spremenljivka knjiga nima lastnosti, kot so velikost, barva in oblika. Gre torej za zapravljanje spomina. Velikost zgornje strukture bi bila 44 bajtov.
Če uporabimo zveze, lahko prihranimo veliko prostora.
java načrtovalni vzorec
#include struct store { double price; union { struct{ char *title; char *author; int number_pages; } book; struct { int color; int size; char *design; } shirt; }item; }; int main() { struct store s; s.item.book.title = 'C programming'; s.item.book.author = 'John'; s.item.book.number_pages = 189; printf('Size is %ld', sizeof(s)); return 0; }
V zgornji kodi smo ustvarili spremenljivko tipa store. Ker smo uporabili unije v zgornji kodi, bi največji pomnilnik, ki ga zaseda spremenljivka, upošteval pri dodelitvi pomnilnika. Izhod zgornjega programa je 32 bajtov. Pri strukturah smo dobili 44 bajtov, pri unijah pa 44 bajtov. Zato je 44 bajtov več kot 32 bajtov, kar prihrani veliko pomnilniškega prostora.