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?
union
Ametiü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 car
tüü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.price
kasutatakse. - Hinnale juurdepääsu saamiseks kasutage
car3
kas(*car3).price
võicar3->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
salary
on 4 baiti - suurus
workerNo
on 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?