C Sindikati (s primjerima)

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?

unionKljuč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 cartip 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.pricekoristi se.
  • Da biste pristupili cijeni koristeći se car3, (*car3).priceili car3->pricese 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 salaryje 4 bajta
  • veličina workerNoje 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?

Zanimljivi članci...