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; 

В обоих случаях union carсоздаются переменные объединения car1, car2 и указатель объединения car3 типа.

Доступ к членам профсоюза

Мы используем .оператор для доступа к членам союза. Для доступа к переменным указателя мы также используем ->оператор.

В приведенном выше примере

  • Чтобы получить доступ к цене 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 байта
  • размер salary4 байта
  • размер workerNo4 байта

Однако размер 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-союзы?

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