logo

C fagforeninger

Unionen er en brugerdefineret datatype i C-sprog, der kan indeholde elementer af de forskellige datatyper ligesom struktur. Men i modsætning til strukturer er alle medlemmerne i C-foreningen gemt på den samme hukommelsesplacering. På grund af dette kan kun ét medlem gemme data på den givne instans.

fagforeninger-i-c

Syntaks for Union i C

Syntaksen for foreningen i C kan opdeles i tre trin, som er som følger:



C Unionserklæring

I denne del angiver vi kun fagforeningens skabelon, dvs. vi oplyser kun medlemmernes navne og datatyper sammen med fagforeningens navn. Der er ikke tildelt nogen hukommelse til fagforeningen i erklæringen.

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

Husk på, at vi altid skal afslutte fagforeningserklæringen med et semikolon.

Forskellige måder at definere en foreningsvariabel på

Vi er nødt til at definere en variabel af fagforeningstypen for at begynde at bruge fagforeningsmedlemmer. Der er to metoder, som vi kan bruge til at definere en unionsvariabel.



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

1. Definition af foreningsvariabel med erklæring

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

2. Definition af Unionsvariabel efter erklæring

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

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

Få adgang til fagforeningsmedlemmer

Vi kan få adgang til medlemmer af en fagforening ved at bruge prikoperatoren (. ) ligesom strukturer.

 var1.member1 ;>

hvor var1 er unionsvariabel og medlem 1 er medlem af fagforeningen .



Ovenstående metode til at få adgang til fagforeningens medlemmer fungerer også for de indlejrede fagforeninger.

 var1.member1.memberA;>

Her,

  • var1 er en unionsvariabel.
  • medlem 1 er medlem af fagforeningen.
  • medlemA er medlem af medlem 1.

Initialisering af Union i C

Initialiseringen af ​​en fagforening er initialiseringen af ​​dens medlemmer ved blot at tildele værdien til den.

 var1.member1 = some_value ;>

En vigtig ting at bemærke her er det kun ét medlem kan indeholde en vis værdi på et givet 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;> }>

>

>

Produktion

The value stored in member1 = 15>

Unionens størrelse

Størrelsen af ​​foreningen vil altid være lig med størrelsen af ​​det største medlem af arrayet. Alle de mindre elementer kan gemme dataene i samme rum uden overløb.

hukommelsestildeling i c union

Hukommelsestildeling i C Union

Eksempel 1: C-program til at finde foreningens størrelse

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

>

>

manuel test
Produktion

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

Forskellen mellem C-struktur og C-union

Følgende tabel viser den vigtigste forskel mellem strukturen og foreningen i C:

Struktur Union
Størrelsen af ​​strukturen er lig med eller større end den samlede størrelse af alle dens medlemmer. Størrelsen af ​​fagforeningen er størrelsen af ​​dens største medlem.
Strukturen kan indeholde data i flere medlemmer på samme tid. Kun ét medlem kan indeholde data på samme tid.
Det erklæres ved hjælp af nøgleordet struct. Det erklæres ved hjælp af fagforeningens søgeord.

Ofte stillede spørgsmål om C Unions

1. Hvad er størrelsen af ​​den givne fagforening?

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

Svar: Størrelsen af ​​den givne union er 20 x 4 bytes = 80 bytes. Selvom arrayet er en samling af lignende dataelementer, anses det for at være en enkelt enhed af C-kompileren.

2. Kan vi opbevare data i flere fagforeningsmedlemmer på samme tid?

Nej. Vi kan kun gemme data i et enkelt medlem på samme tid. For eksempel i det følgende C-program deler både x og y den samme placering. Hvis vi ændrer x, kan vi se ændringerne afspejles 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;> }>

>

>

Produktion

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

3. Hvad er fagforeningernes ansøgninger?

Fagforeninger kan være nyttige i mange situationer, hvor vi ønsker at bruge den samme hukommelse til to eller flere medlemmer. Antag for eksempel, at vi ønsker at implementere en binær trædatastruktur, hvor hver bladknude har en dobbelt dataværdi, mens hver intern knude har pointere til to børn, men ingen data. Hvis vi erklærer dette som:

C




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

netværksarkitektur

>

>

så kræver hver node 16 bytes, med halvdelen af ​​bytes spildt for hver type node. På den anden side, hvis vi erklærer en node som følgende, kan vi spare plads.

C




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

>

>