La unió és un tipus de dades definit per l'usuari en llenguatge C que pot contenir elements dels diferents tipus de dades igual que l'estructura. Però a diferència de les estructures, tots els membres de la unió C s'emmagatzemen a la mateixa ubicació de memòria. Per això, només un membre pot emmagatzemar dades a la instància donada.

Sintaxi d'unió en C
La sintaxi de la unió en C es pot dividir en tres passos que són els següents:
C Declaració de la Unió
En aquesta part, només declarem la plantilla del sindicat, és a dir, només declarem els noms i tipus de dades dels membres juntament amb el nom del sindicat. No s'assigna cap memòria al sindicat en la declaració.
union union_name { datatype member1 ; datatype member2 ; ... };>
Cal tenir en compte que sempre hem d'acabar la declaració sindical amb punt i coma.
Diferents maneres de definir una variable d'unió
Hem de definir una variable del tipus d'unió per començar a utilitzar membres del sindicat. Hi ha dos mètodes amb els quals podem definir una variable d'unió.
- Amb Declaració de la Unió
- Després de la declaració de la Unió
1. Definició de variable sindical amb declaració
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Definició de la variable sindical després de la declaració
union union_name var1, var2, var3 ...;>
on nom_unió és el nom d'un sindicat ja declarat.
Accés als membres del Sindicat
Podem accedir als membres d'una unió mitjançant l'operador de punt ( . ) igual que les estructures.
var1.member1 ;>
on var1 és el variable sindical i membre 1 és el membre del sindicat .
El mètode anterior per accedir als membres del sindicat també funciona per als sindicats imbricats.
var1.member1.memberA;>
Aquí,
- var1 és una variable sindical.
- membre 1 és membre del sindicat.
- membreA és membre de member1.
Inicialització de la Unió a C
La inicialització d'un sindicat és la inicialització dels seus membres simplement assignant-li el valor.
var1.member1 = some_value ;>
Una cosa important a tenir en compte aquí és això només un membre pot contenir algun valor en un moment determinat.
Exemple d'unió
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;> }> |
>
>Sortida
The value stored in member1 = 15>
Mida de la Unió
La mida de la unió sempre serà igual a la mida del membre més gran de la matriu. Tots els elements de menys mida poden emmagatzemar les dades al mateix espai sense cap desbordament.

Assignació de memòria en C Union
Exemple 1: programa C per trobar la mida de la unió
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;> }> |
>
>
porció de matriu javaSortida
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Diferència entre Estructura C i Unió C
La taula següent mostra la diferència clau entre l'estructura i la unió en C:
Estructura | Unió |
---|---|
La mida de l'estructura és igual o superior a la mida total de tots els seus membres. | La mida del sindicat és la mida del seu membre més gran. |
L'estructura pot contenir dades en diversos membres al mateix temps. | Només un membre pot contenir dades alhora. |
Es declara mitjançant la paraula clau struct. | Es declara mitjançant la paraula clau union. |
Preguntes freqüents sobre sindicats C
1. Quina és la mida de la unió donada?
union un { int a; int arr[20]; }>
Resposta: La mida de la unió donada és de 20 x 4 bytes = 80 bytes. Fins i tot si la matriu és una col·lecció d'elements de dades similars, el compilador C considera que és una entitat única.
2. Podem emmagatzemar dades en diversos membres del sindicat alhora?
No. Només podem emmagatzemar dades en un sol membre alhora. Per exemple, al programa C següent, tant x com y comparteixen la mateixa ubicació. Si canviem x, podem veure que els canvis es reflecteixen a 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;> }> |
>
>Sortida
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. Quines són les aplicacions dels sindicats?
Els sindicats poden ser útils en moltes situacions en què volem utilitzar la mateixa memòria per a dos o més membres. Per exemple, suposem que volem implementar una estructura de dades d'arbre binari on cada node fulla té un valor de dades doble, mentre que cada node intern té punters a dos fills, però sense dades. Si ho declarem com:
C
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
>
aleshores, cada node requereix 16 bytes, amb la meitat dels bytes desaprofitats per a cada tipus de node. D'altra banda, si declarem un node com el següent, podem estalviar espai.
C
objectiu java
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>