Šajā apmācībā jūs uzzināsit par arodbiedrībām C programmēšanā. Konkrētāk, kā izveidot savienības, piekļūt tās biedriem un uzzināt atšķirības starp savienībām un struktūrām.
Savienība ir lietotāja definēts tips, kas līdzīgs struktūrām C, izņemot vienu galveno atšķirību. Struktūras piešķir pietiekami daudz vietas, lai uzglabātu visus tās locekļus, kur arodbiedrības piešķir vietu, kur glabāt tikai lielāko dalībnieku.
Kā definēt savienību?
Mēs izmantojam union
atslēgvārdu, lai definētu savienības. Lūk, piemērs:
union car ( char name(50); int price; );
Iepriekš minētais kods nosaka atvasinātu tipu union car
.
Izveidojiet savienojuma mainīgos
Kad ir definēta savienība, tā izveido lietotāja definētu tipu. Tomēr atmiņa netiek piešķirta. Lai piešķirtu atmiņu konkrētam savienības tipam un darbotos ar to, mums ir jāizveido mainīgie.
Lūk, kā mēs veidojam savienības mainīgos.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Vēl viens veids, kā izveidot savienības mainīgos, ir:
union car ( char name(50); int price; ) car1, car2, *car3;
Abos gadījumos union car
tiek izveidoti savienojuma mainīgie car1, car2 un veida savienojuma rādītājs car3 .
Piekļūt arodbiedrības biedriem
Mēs izmantojam .
operatoru, lai piekļūtu arodbiedrības biedriem. Lai piekļūtu rādītāja mainīgajiem, mēs izmantojam arī ->
operatoru.
Iepriekš minētajā piemērā
- Lai piekļūtu cenai
car1
,car1.price
tiek izmantots. - Lai piekļūtu cenai, izmantojot
car3
vai nu,(*car3).price
vai arīcar3->price
var izmantot.
Starpība starp savienībām un struktūrām
Ņemsim piemēru, lai parādītu atšķirību starp savienībām un struktūrām:
#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; )
Rezultāts
savienības izmērs = 32 struktūras izmērs = 40
Kāpēc šī atšķirība savienības un struktūras mainīgo lielumā?
Šeit sJob izmērs ir 40 baiti, jo
- lielums
name(32)
ir 32 baiti - lielums
salary
ir 4 baiti - lielums
workerNo
ir 4 baiti
Tomēr uJob izmērs ir 32 baiti. Tas ir tāpēc, ka savienojuma mainīgā lielums vienmēr būs tā lielākā elementa lielums. Iepriekš minētajā piemērā tā lielākā elementa ( name(32)
) lielums ir 32 baiti.
Ar arodbiedrību visiem locekļiem ir viena atmiņa .
Piemērs: Piekļuve Savienības locekļiem
#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; )
Rezultāts
Alga = 0,0 Strādājošo skaits = 100
Lai uzzinātu, kur tiek izmantotas arodbiedrības, apmeklējiet vietni Kāpēc mums ir vajadzīgas C savienības?