C savienības (ar piemēriem)

Š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 unionatslē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 cartiek 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.pricetiek izmantots.
  • Lai piekļūtu cenai, izmantojot car3vai nu, (*car3).pricevai arī car3->pricevar 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 salaryir 4 baiti
  • lielums workerNoir 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?

Interesanti raksti...