U ovom vodiču naučit ćete o sindikatima u programiranju na jeziku C. Točnije, kako stvoriti sindikate, pristupiti njihovim članovima i naučiti razlike između sindikata i struktura.
Unija je korisnički definirani tip sličan strukturama u C, osim jedne ključne razlike. Strukture dodjeljuju dovoljno prostora za pohranu svih svojih članova, dok sindikati dodjeljuju prostor za pohranu samo najvećeg člana.
Kako definirati sindikat?
union
Ključnu riječ koristimo za definiranje sindikata. Evo primjera:
union car ( char name(50); int price; );
Gornji kod definira izvedeni tip union car
.
Stvorite unijatne varijable
Kada je unija definirana, ona stvara korisnički definirani tip. Međutim, nije dodijeljena memorija. Da bismo dodijelili memoriju za dati tip unije i radili s njom, moramo stvoriti varijable.
Evo kako stvaramo unijatske varijable.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Drugi način stvaranja unijskih varijabli je:
union car ( char name(50); int price; ) car1, car2, *car3;
U oba slučaja kreiraju se unijatne varijable car1, car2 i union car
tip pokazivača sindikata car3 .
Pristupite članovima sindikata
.
Operatora koristimo za pristup članovima sindikata. Za pristup varijablama pokazivača koristimo i ->
operator.
U gornjem primjeru,
- Za pristup cijeni za
car1
,car1.price
koristi se. - Da biste pristupili cijeni koristeći se
car3
,(*car3).price
ilicar3->price
se može koristiti.
Razlika između sindikata i struktura
Uzmimo primjer da pokažemo razliku između sindikata i struktura:
#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; )
Izlaz
veličina spoja = 32 veličina strukture = 40
Zašto ta razlika u veličini varijabli unija i strukture?
Ovdje je veličina sJob 40 bajtova jer
- veličina
name(32)
je 32 bajta - veličina
salary
je 4 bajta - veličina
workerNo
je 4 bajta
Međutim, veličina uJob je 32 bajta. To je zato što će veličina promjenljive unije uvijek biti veličina njezina najvećeg elementa. U gornjem primjeru veličina njegovog najvećeg elementa ( name(32)
) iznosi 32 bajta.
Sa sindikatom, svi članovi dijele isto sjećanje .
Primjer: Pristup članovima sindikata
#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; )
Izlaz
Plaća = 0,0 Broj radnika = 100
Da biste saznali gdje se sindikati koriste, posjetite Zašto nam trebaju C sindikati?