C ametiühingud (koos näidetega)

Selles õpetuses saate teada ametiühingute kohta C-programmeerimises. Täpsemalt, kuidas luua ametiühinguid, pääseda juurde selle liikmetele ja õppida ametiühingute ja struktuuride erinevusi.

Liit on kasutaja määratletud tüüp, mis sarnaneb C-s olevate struktuuridega, välja arvatud üks peamine erinevus. Struktuurid eraldavad piisavalt ruumi kõigi oma liikmete salvestamiseks, kus ametiühingud eraldavad ruumi ainult suurima liikme salvestamiseks.

Kuidas määratleda liitu?

unionAmetiühingute määratlemiseks kasutame märksõna. Siin on näide:

 union car ( char name(50); int price; ); 

Ülaltoodud kood määratleb tuletatud tüübi union car.

Looge liidu muutujad

Kui liit on määratletud, loob see kasutaja määratud tüübi. Mälu siiski ei eraldata. Antud liiduliigi jaoks mälu eraldamiseks ja sellega töötamiseks peame looma muutujad.

Nii loome liidu muutujad.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Teine võimalus liidu muutujate loomiseks on:

 union car ( char name(50); int price; ) car1, car2, *car3; 

Mõlemal juhul luuakse liidumuutujad car1, car2 ja union cartüüpi liidekursor car3 .

Juurdepääs ametiühingu liikmetele

.Ametiühingu liikmetele juurdepääsu saamiseks kasutame operaatorit. Kursori muutujate juurde pääsemiseks kasutame ka ->operaatorit.

Ülaltoodud näites

  • Juurdepääsu hind car1, car1.pricekasutatakse.
  • Hinnale juurdepääsu saamiseks kasutage car3kas (*car3).pricevõi car3->price.

Ametiühingute ja struktuuride erinevus

Võtame näite, et demonstreerida erinevust ametiühingute ja struktuuride vahel:

 #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; ) 

Väljund

 liidu suurus = 32 struktuuri suurus = 40 

Miks selline erinevus liidu ja struktuuri muutujate suuruses?

Siin on sJobi suurus 40 baiti, kuna

  • suurus name(32)on 32 baiti
  • suurus salaryon 4 baiti
  • suurus workerNoon 4 baiti

Kuid uJobi suurus on 32 baiti. Sellepärast, et liidu muutuja suurus on alati selle suurima elemendi suurus. Ülaltoodud näites on selle suurima elemendi ( name(32)) suurus 32 baiti.

Ametiühinguga on kõigil liikmetel sama mälu .

Näide: juurdepääs liidu liikmetele

 #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; )

Väljund

 Palk = 0,0 Töötajate arv = 100 

Et teada saada, kus ametiühinguid kasutatakse, külastage lehte Miks meil on vaja C ametiühinguid?

Huvitavad Artiklid...