logo

C fagforeninger

Unionen er en brukerdefinert datatype på C-språk som kan inneholde elementer av de forskjellige datatypene akkurat som struktur. Men i motsetning til strukturer, er alle medlemmene i C-foreningen lagret på samme minnested. På grunn av dette kan bare ett medlem lagre data på den gitte forekomsten.

fagforeninger-in-c

Syntaks for union i C

Syntaksen til unionen i C kan deles inn i tre trinn som er som følger:



C Unionserklæring

I denne delen erklærer vi kun fagforeningens mal, det vil si at vi kun oppgir medlemmenes navn og datatyper sammen med fagforeningens navn. Det er ikke tildelt noe minne til forbundet i erklæringen.

 union union_name { datatype member1 ; datatype member2 ; ... };>

Husk at vi alltid må avslutte fagforeningserklæringen med semikolon.

Ulike måter å definere en unionsvariabel på

Vi må definere en variabel av fagforeningstypen for å begynne å bruke fagforeningsmedlemmer. Det er to metoder som vi kan bruke til å definere en unionsvariabel.



  1. Med unionserklæring
  2. Etter foreningens erklæring

1. Definere unionsvariabel med erklæring

 union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>

2. Definere unionsvariabel etter erklæring

 union union_name var1, var2, var3 ...;>

hvor fagforeningsnavn er navnet på en allerede erklært fagforening.

Få tilgang til fagforeningsmedlemmer

Vi kan få tilgang til medlemmene i en fagforening ved å bruke (. ) punktoperatoren akkurat som strukturer.

 var1.member1 ;>

hvor var1 er den unionsvariabel og medlem 1 er den medlem av forbundet .



Metoden ovenfor for å få tilgang til medlemmene av fagforeningen fungerer også for de nestede fagforeningene.

 var1.member1.memberA;>

Her,

  • var1 er en unionsvariabel.
  • medlem 1 er medlem av forbundet.
  • medlemA er medlem av medlem 1.

Initialisering av Union i C

Initialiseringen av en fagforening er initialiseringen av dens medlemmer ved ganske enkelt å tildele verdien til den.

 var1.member1 = some_value ;>

En viktig ting å merke seg her er det bare ett medlem kan inneholde en viss verdi på et gitt tidspunkt.

Eksempel på union

C




// C Program to demonstrate how to use union> #include> // union template or declaration> union> un {> >int> member1;> >char> member2;> >float> member3;> };> // driver code> int> main()> {> >// defining a union variable> >union> un var1;> >// initializing the union member> >var1.member1 = 15;> >printf>(>'The value stored in member1 = %d'>,> >var1.member1);> >return> 0;> }>

>

>

Produksjon

The value stored in member1 = 15>

Unionens størrelse

Størrelsen på foreningen vil alltid være lik størrelsen på det største medlemmet av arrayet. Alle de mindre elementene kan lagre dataene på samme plass uten overløp.

minnetildeling i c union

Minnetildeling i C Union

Eksempel 1: C-program for å finne størrelsen på fagforeningen

C




// C Program to find the size of the union> #include> // declaring multiple unions> union> test1 {> >int> x;> >int> y;> } Test1;> union> test2 {> >int> x;> >char> y;> } Test2;> union> test3 {> >int> arr[10];> >char> y;> } Test3;> // driver code> int> main()> {> >// finding size using sizeof() operator> >int> size1 =>sizeof>(Test1);> >int> size2 =>sizeof>(Test2);> >int> size3 =>sizeof>(Test3);> >printf>(>'Sizeof test1: %d '>, size1);> >printf>(>'Sizeof test2: %d '>, size2);> >printf>(>'Sizeof test3: %d'>, size3);> >return> 0;> }>

>

>

df loc
Produksjon

Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>

Forskjellen mellom C-struktur og C-union

Følgende tabell viser nøkkelforskjellen mellom strukturen og unionen i C:

Struktur Union
Størrelsen på strukturen er lik eller større enn den totale størrelsen på alle dens medlemmer. Størrelsen på forbundet er størrelsen på dets største medlem.
Strukturen kan inneholde data i flere medlemmer samtidig. Bare ett medlem kan inneholde data samtidig.
Det er deklarert ved hjelp av nøkkelordet struct. Det erklæres ved hjelp av fagforeningens nøkkelord.

Vanlige spørsmål om C Unions

1. Hva er størrelsen på den gitte fagforeningen?

union un { int a; int arr[20]; }>

Svar: Størrelsen på den gitte unionen er 20 x 4 byte = 80 byte. Selv om matrisen er en samling av lignende dataelementer, anses den for å være en enkelt enhet av C-kompilatoren.

2. Kan vi lagre data i flere fagforeningsmedlemmer samtidig?

Nei. Vi kan bare lagre data i ett enkelt medlem samtidig. For eksempel i følgende C-program deler både x og y samme plassering. Hvis vi endrer x, kan vi se endringene reflekteres i y.

C




// C program to check if we can store data in multiple union> // members> #include> // Declaration of union is same as structures> union> test {> >int> x, y;> };> int> main()> {> >// A union variable t> >union> test t;> >t.x = 2;>// t.y also gets value 2> >printf>(>'After making x = 2: x = %d, y = %d '>, t.x,> >t.y);> >t.y = 10;>// t.x is also updated to 10> >printf>(>'After making y = 10: x = %d, y = %d '>, t.x,> >t.y);> >return> 0;> }>

>

>

Produksjon

After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>

3. Hva er fagforeningenes søknader?

Fagforeninger kan være nyttige i mange situasjoner der vi ønsker å bruke samme minne for to eller flere medlemmer. Anta for eksempel at vi ønsker å implementere en binær tredatastruktur der hver bladnode har en dobbel dataverdi, mens hver intern node har pekere til to barn, men ingen data. Hvis vi erklærer dette som:

C




struct> NODE {> >struct> NODE* left;> >struct> NODE* right;> >double> data;> };>

nettverksarkitektur

>

>

da krever hver node 16 byte, med halvparten av bytene bortkastet for hver type node. På den annen side, hvis vi erklærer en node som følgende, kan vi spare plass.

C




struct> NODE {> >bool> is_leaf;> >union> {> >struct> {> >struct> NODE* left;> >struct> NODE* right;> >} internal;> >double> data;> >} info;> };>

>

>