I denne vejledning lærer du om fagforeninger i C-programmering. Mere specifikt, hvordan man opretter fagforeninger, får adgang til dets medlemmer og lærer forskellene mellem fagforeninger og strukturer.
En union er en brugerdefineret type svarende til strukturer i C bortset fra en nøgleforskel. Structs tildeler plads nok til at gemme alle dets medlemmer, hvor fagforeninger afsætter plads til kun at opbevare det største medlem.
Hvordan defineres en union?
Vi bruger union
nøgleordet til at definere fagforeninger. Her er et eksempel:
union car ( char name(50); int price; );
Ovenstående kode definerer en afledt type union car
.
Opret fagvariabler
Når en union er defineret, opretter den en brugerdefineret type. Der tildeles imidlertid ingen hukommelse. For at tildele hukommelse til en given unionstype og arbejde med den er vi nødt til at oprette variabler.
Sådan opretter vi foreningsvariabler.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
En anden måde at skabe unionsvariabler på er:
union car ( char name(50); int price; ) car1, car2, *car3;
I begge tilfælde oprettes foreningsvariablerne car1, car2 og en unionsmarkør car3 af union car
typen.
Få adgang til medlemmer af en fagforening
Vi bruger .
operatøren til at få adgang til medlemmer af en fagforening. For at få adgang til markørvariabler bruger vi også ->
operatøren.
I ovenstående eksempel
- For at få adgang til pris for
car1
,car1.price
bruges. - For at få adgang til pris ved hjælp af
car3
en af(*car3).price
ellercar3->price
kan bruges.
Forskel mellem fagforeninger og strukturer
Lad os tage et eksempel for at demonstrere forskellen mellem fagforeninger og strukturer:
#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; )
Produktion
størrelse af union = 32 størrelse af struktur = 40
Hvorfor denne forskel i størrelsen af union og struktur variabler?
Her er størrelsen på sJob 40 bytes, fordi
- størrelsen
name(32)
er 32 byte - størrelsen
salary
er 4 byte - størrelsen
workerNo
er 4 byte
Størrelsen på uJob er dog 32 byte. Det skyldes, at størrelsen på en unionsvariabel altid vil være størrelsen på dens største element. I ovenstående eksempel er størrelsen på dets største element ( name(32)
) 32 byte.
Med en fagforening deler alle medlemmer den samme hukommelse .
Eksempel: Adgang til EU-medlemmer
#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; )
Produktion
Løn = 0,0 Antal arbejdere = 100
For at lære, hvor fagforeninger bruges, skal du besøge Hvorfor har vi brug for C-fagforeninger?