logo

Sindicatele C

Union este un tip de date definit de utilizator în limbaj C care poate conține elemente ale diferitelor tipuri de date, la fel ca structura. Dar, spre deosebire de structuri, toți membrii din uniunea C sunt stocați în aceeași locație de memorie. Din acest motiv, doar un membru poate stoca date la instanța dată.

sindicate-in-c

Sintaxa Unirii în C

Sintaxa uniunii în C poate fi împărțită în trei pași care sunt după cum urmează:

C Declarația Uniunii

În această parte, declarăm doar șablonul uniunii, adică declarăm doar numele și tipurile de date ale membrilor împreună cu numele uniunii. În declarație nu i se alocă nicio memorie sindicatului.



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

Rețineți că trebuie să încheiem întotdeauna declarația de sindicat cu punct și virgulă.

Diferite moduri de a defini o variabilă de uniune

Trebuie să definim o variabilă de tip uniune pentru a începe să folosim membrii uniunii. Există două metode prin care putem defini o variabilă de unire.

  1. Cu Declarația Uniunii
  2. După Declarația Uniunii

1. Definirea Variabilei Unirii cu Declarație

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

2. Definirea variabilei unionale după declarare

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

Unde nume_union este numele unei uniuni deja declarate.

Accesați membrii Uniunii

Putem accesa membrii unei uniuni folosind operatorul punct ( . ) la fel ca structurile.

 var1.member1 ;>

Unde var1 este variabila de unire și membru1 este membru al sindicatului .

Metoda de mai sus de accesare a membrilor uniunii funcționează și pentru sindicatele imbricate.

 var1.member1.memberA;>

Aici,

  • var1 este o variabilă de uniune.
  • membru1 este membru al sindicatului.
  • membruA este membru al membru1.

Inițializarea Unirii în C

Inițializarea unui sindicat este inițializarea membrilor săi prin simpla atribuire a valorii acesteia.

 var1.member1 = some_value ;>

Un lucru important de remarcat aici este că doar un membru poate conține o anumită valoare la o anumită instanță de timp.

Exemplu de Unire

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

>

>

Ieșire

The value stored in member1 = 15>

Dimensiunea Unirii

Mărimea uniunii va fi întotdeauna egală cu dimensiunea celui mai mare membru al matricei. Toate elementele de dimensiuni mai mici pot stoca datele în același spațiu fără nici un depășire.

alocarea memoriei în uniunea c

Alocarea memoriei în C Union

Exemplul 1: program C pentru a găsi dimensiunea uniunii

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

>

>

elementele de bază ale seleniului
Ieșire

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

Diferența dintre C Structure și C Union

Următorul tabel listează diferența cheie dintre structură și unire în C:

Structura Uniune
Dimensiunea structurii este egală sau mai mare decât dimensiunea totală a tuturor membrilor săi. Mărimea uniunii este mărimea celui mai mare membru al acesteia.
Structura poate conține date în mai mulți membri în același timp. Doar un membru poate conține date în același timp.
Este declarat folosind cuvântul cheie struct. Este declarat folosind cuvântul cheie union.

Întrebări frecvente despre sindicatele C

1. Care este dimensiunea uniunii date?

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

Răspuns: Mărimea uniunii date este de 20 x 4 octeți = 80 octeți. Chiar dacă tabloul este o colecție de elemente de date similare, compilatorul C îl consideră a fi o singură entitate.

2. Putem stoca date în mai mulți membri de sindicat în același timp?

Nu. Putem stoca date doar într-un singur membru în același timp. De exemplu, în următorul program C, ambele x și y au aceeași locație. Dacă schimbăm x, putem vedea că modificările sunt reflectate în 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;> }>

forma completa pvr

>

>

Ieșire

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

3. Care sunt aplicațiile sindicatelor?

Sindicatele pot fi utile în multe situații în care dorim să folosim aceeași memorie pentru doi sau mai mulți membri. De exemplu, să presupunem că vrem să implementăm o structură de date arbore binar în care fiecare nod frunză are o valoare de date dublă, în timp ce fiecare nod intern are pointeri către doi copii, dar fără date. Dacă declarăm acest lucru ca:

C




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

>

>

apoi fiecare nod necesită 16 octeți, jumătate din octeți irosiți pentru fiecare tip de nod. Pe de altă parte, dacă declarăm un nod după cum urmează, atunci putem economisi spațiu.

C




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

>

>