În acest tutorial, veți afla despre uniunile din programarea C. Mai precis, cum să creați sindicatele, să accesați membrii săi și să aflați diferențele dintre sindicate și structuri.
O uniune este un tip definit de utilizator similar cu structurile din C, cu excepția unei diferențe cheie. Structurile alocă suficient spațiu pentru a stoca toți membrii săi în cazul în care sindicatele alocă spațiul pentru a stoca doar cel mai mare membru.
Cum se definește o uniune?
Folosim union
cuvântul cheie pentru a defini uniunile. Iată un exemplu:
union car ( char name(50); int price; );
Codul de mai sus definește un tip derivat union car
.
Creați variabile de uniune
Când este definită o uniune, aceasta creează un tip definit de utilizator. Cu toate acestea, nu este alocată nicio memorie. Pentru a aloca memorie pentru un anumit tip de uniune și a lucra cu acesta, trebuie să creăm variabile.
Iată cum creăm variabile de uniune.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Un alt mod de a crea variabile de uniune este:
union car ( char name(50); int price; ) car1, car2, *car3;
În ambele cazuri, union car
sunt create variabilele de unire car1, car2 și un pointer de unire car3 de tip.
Accesați membrii unui sindicat
Folosim .
operatorul pentru a accesa membrii unui sindicat. Pentru a accesa variabilele indicatorului, folosim și ->
operatorul.
În exemplul de mai sus,
- Pentru a accesa prețul pentru
car1
,car1.price
este folosit. - Pentru a prețurilor de acces utilizând
car3
, fie(*car3).price
saucar3->price
pot fi utilizate.
Diferența dintre uniuni și structuri
Să luăm un exemplu pentru a demonstra diferența dintre uniuni și structuri:
#include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; )
Ieșire
dimensiunea uniunii = 32 dimensiunea structurii = 40
De ce această diferență în mărimea variabilelor de uniune și structură?
Aici, dimensiunea sJob este de 40 de octeți deoarece
- dimensiunea lui
name(32)
este de 32 de octeți - dimensiunea
salary
este de 4 octeți - dimensiunea
workerNo
este de 4 octeți
Cu toate acestea, dimensiunea uJob este de 32 de octeți. Acest lucru se datorează faptului că dimensiunea unei variabile de uniune va fi întotdeauna dimensiunea celui mai mare element al ei. În exemplul de mai sus, dimensiunea celui mai mare element al său, ( name(32)
), este de 32 de octeți.
Cu o uniune, toți membrii împărtășesc aceeași memorie .
Exemplu: Accesarea membrilor Uniunii
#include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )
Ieșire
Salariu = 0,0 Număr de lucrători = 100
Pentru a afla unde sunt folosite sindicatele, accesați De ce avem nevoie de uniuni C?