logo

Union i C

Union kan defineres som en brukerdefinert datatype som er en samling av forskjellige variabler av forskjellige datatyper på samme minneplassering. Fagforeningen kan også defineres som mange medlemmer, men bare ett medlem kan inneholde en verdi på et bestemt tidspunkt.

Union er en brukerdefinert datatype, men i motsetning til strukturer deler de samme minneplassering.

La oss forstå dette gjennom et eksempel.

 struct abc { int a; char b; } 

Koden ovenfor er den brukerdefinerte strukturen som består av to medlemmer, dvs. 'a' av typen int og 'b' av typen karakter . Når vi sjekker adressene til 'a' og 'b', fant vi ut at adressene deres er forskjellige. Derfor konkluderer vi med at medlemmene i strukturen ikke deler samme minneplassering.

Når vi definerer union, så fant vi at union er definert på samme måte som strukturen er definert, men forskjellen er at union nøkkelord brukes for å definere union datatype, mens struct nøkkelord brukes for å definere strukturen. Unionen inneholder datamedlemmene, dvs. 'a' og 'b', når vi sjekker adressene til begge variablene, fant vi ut at begge har de samme adressene. Det betyr at fagforeningens medlemmer deler samme minnested.

La oss ta en titt på den billedlige representasjonen av minnetildelingen.

Figuren nedenfor viser den billedmessige representasjonen av strukturen. Strukturen har to medlemmer; dvs. den ene er av heltallstype, og den andre er av tegntypen. Siden 1 blokk er lik 1 byte; Derfor vil 'a'-variabelen bli tildelt 4 minneblokker mens 'b'-variabelen vil bli tildelt 1 minneblokk.

Figuren nedenfor viser den billedlige representasjonen av fagforeningsmedlemmer. Begge variablene deler samme minneplassering og har samme startadresse.

I fagforening vil medlemmene dele minnestedet. Hvis vi prøver å gjøre endringer i noen av medlemmene, vil det også reflekteres til det andre medlemmet. La oss forstå dette konseptet gjennom et eksempel.

 union abc { int a; char b; }var; int main() { var.a = 66; printf('
 a = %d', var.a); printf('
 b = %d', var.b); } 

I koden ovenfor har fagforeningen to medlemmer, dvs. 'a' og 'b'. 'var' er en variabel av union abc-typen. I hoved() metoden, tildeler vi 66 til 'a'-variabelen, så var.a vil skrive ut 66 på skjermen. Siden både 'a' og 'b' deler minneplasseringen, var.b vil skrive ut ' B ' (ascii-kode på 66).

Bestemme størrelsen på fagforeningen

Størrelsen på forbundet er basert på størrelsen på det største medlemmet i forbundet.

La oss forstå gjennom et eksempel.

 union abc{ int a; char b; float c; double d; }; int main() { printf('Size of union abc is %d', sizeof(union abc)); return 0; } 

Som vi vet er størrelsen på int 4 byte, størrelsen på char er 1 byte, størrelsen på float er 4 byte, og størrelsen på dobbel er 8 byte. Siden den doble variabelen opptar det største minnet blant alle de fire variablene, vil totalt 8 byte tildeles i minnet. Derfor vil utgangen av programmet ovenfor være 8 byte.

Tilgang til medlemmer av fagforeningen ved hjelp av pekere

Vi kan få tilgang til fagforeningens medlemmer gjennom pekere ved å bruke (->) piloperatoren.

La oss forstå gjennom et eksempel.

 #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; } 

I koden ovenfor har vi laget en pekervariabel, dvs. *ptr, som lagrer adressen til var-variabelen. Nå kan ptr få tilgang til variabelen 'a' ved å bruke (->) operatoren. Derfor vil utgangen av koden ovenfor være 90.

Hvorfor trenger vi C-forbund?

Tenk på ett eksempel for å forstå behovet for C-fagforeninger. La oss vurdere en butikk som har to varer:

  • Bøker
  • Skjorter

Butikkeiere ønsker å lagre postene for de to ovennevnte varene sammen med relevant informasjon. Bøker inkluderer for eksempel tittel, forfatter, antall sider, pris, og skjorter inkluderer farge, design, størrelse og pris. Egenskapen 'pris' er vanlig i begge varene. Butikkeieren ønsker å lagre eiendommene, deretter hvordan han/hun vil lagre postene.

svever i css

Opprinnelig bestemte de seg for å lagre postene i en struktur som vist nedenfor:

 struct store { double price; char *title; char *author; int number_pages; int color; int size; char *design; }; 

Strukturen ovenfor består av alle varene som butikkeier ønsker å lagre. Strukturen ovenfor er fullstendig brukbar, men prisen er felleseie både for varene og resten av varene er individuelle. Egenskapene som price, *title, *author og number_pages tilhører Books mens farge, størrelse, *design tilhører Shirt.

La oss se hvordan vi kan få tilgang til medlemmene av strukturen .

 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; } 

I koden ovenfor har vi laget en variabel av typen butikk . Vi har tildelt verdiene til variablene, tittel, forfatter, antall_sider, pris, men bokvariabelen har ikke egenskapene som størrelse, farge og design. Derfor er det sløsing med minne. Størrelsen på strukturen ovenfor vil være 44 byte.

Vi kan spare mye plass hvis vi bruker fagforeninger.

 #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; } 

I koden ovenfor har vi laget en variabel av typen store. Siden vi brukte fagforeningene i koden ovenfor, vil det største minnet som er okkupert av variabelen bli vurdert for minneallokeringen. Utgangen til programmet ovenfor er 32 byte. Når det gjelder strukturer, oppnådde vi 44 byte, mens når det gjelder fagforeninger, er størrelsen oppnådd 44 byte. Derfor er 44 byte større enn 32 byte og sparer mye minneplass.