Uniuni C (cu exemple)

Î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 unioncuvâ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 carsunt 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.priceeste folosit.
  • Pentru a prețurilor de acces utilizând car3, fie (*car3).pricesau car3->pricepot 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 salaryeste de 4 octeți
  • dimensiunea workerNoeste 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?

Articole interesante...