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 

Щоб дізнатись, де використовуються спілки, відвідайте Навіщо нам потрібні спілки С?

Цікаві статті...