C Съюзи (с примери)

В този урок ще научите за обединенията в програмирането на C. По-конкретно, как да създавате синдикати, да осъществявате достъп до членовете им и да научавате разликите между синдикатите и структурите.

Обединението е дефиниран от потребителя тип, подобен на структурите в C, с изключение на една ключова разлика. Структурите отделят достатъчно място за съхраняване на всичките си членове, докато профсъюзите разпределят пространството за съхраняване само на най-големия член.

Как да дефинирам съюз?

Използваме unionключовата дума за дефиниране на обединения. Ето пример:

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

Горният код дефинира производен тип union car.

Създайте променливи на обединението

Когато обединението е дефинирано, то създава дефиниран от потребителя тип. Обаче не е разпределена памет. За да разпределим памет за даден тип съюз и да работим с него, трябва да създадем променливи.

Ето как създаваме обединени променливи.

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

Друг начин за създаване на обединени променливи е:

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

И в двата случая се създават обединени променливи car1, car2 и обединителен указател car3 от union carтипа.

Достъп до членове на съюз

Използваме .оператора за достъп до членове на съюз. За достъп до променливите на указателя използваме също ->оператора.

В горния пример,

  • За цените за достъп car1, car1.priceсе използва.
  • За достъп до цената се използва car3или, (*car3).priceили car3->priceможе да се използва.

Разлика между съюзи и структури

Нека вземем пример, за да демонстрираме разликата между съюзи и структури:

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

Изход

 размер на обединението = 32 размер на структурата = 40 

Защо тази разлика в размера на променливите на обединението и структурата?

Тук размерът на sJob е 40 байта, защото

  • размерът на name(32)е 32 байта
  • размерът на salaryе 4 байта
  • размерът на workerNoе 4 байта

Размерът на uJob обаче е 32 байта. Това е така, защото размерът на променливата на обединението винаги ще бъде размерът на най-големия й елемент. В горния пример размерът на най-големия му елемент ( name(32)) е 32 байта.

При обединение всички членове споделят една и съща памет .

Пример: Достъп до членове на Съюза

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

Изход

 Заплата = 0,0 Брой на работниците = 100 

За да научите къде се използват съюзите, посетете Защо се нуждаем от C профсъюзи?

Интересни статии...