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.

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.
- Med unionserklæring
- 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
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 locProduksjon
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;> };> |
>
>