Різниця між структурою та союзом

Як структура, так і об'єднання - це визначені користувачем типи даних у мові C і концептуально однакові, однак вони все ще відрізняються деяким чином, як спосіб розподілу пам'яті для своїх членів. Вони оголошуються аналогічно, але вони функціонують по-різному. Вони дозволяють користувачеві поєднувати різні типи даних під одним іменем. У той час як окреме місце пам'яті використовується для кожного члена при оголошенні змінних структури, різні члени змінної об'єднання ділять однакове місце пам'яті. Давайте вивчимо різницю між структурою та об'єднанням детально.

Що таке структура?

Структура - це лише інший визначений користувачем тип даних на С, який дозволяє користувачеві поєднувати типи даних різних видів в один тип в блоці пам'яті. Структура може містити як прості, так і складні типи даних, пов'язані один з одним, що в іншому випадку не матиме сенсу. Кожен член структури має своє власне місце в пам'яті, щоб отримати доступ до нього та отримати його в будь-який час.

Структура використовується тоді, коли багато даних потребує групування, як-от каталог, який зберігає інформацію про багатьох членів у книзі або адресну книгу, в якій зберігається вся інформація про один контакт - ім’я, адресу, контактний номер тощо. Адреса кожного члена буде в порядку зростання, що означає, що пам'ять кожного члена буде починатися з різних значень зміщення. Зміна значення одного члена не вплине на інших членів.

Ключове слово "struct" використовується для визначення структури різних типів даних під одним ім'ям. Наприклад, якщо ви хочете створити базу даних працівника, вам потрібно буде зберегти дані про ім’я, вік, телефон та зарплату під одним об'єктом. Це робиться за допомогою ключового слова "struct", яке потім повідомляє компілятору, що структуру було оголошено.

працівник структури

назва рядка;

строковий вік;

струнний телефон;

строкова зарплата;

emp1, emp2;

Тут 'співробітник' - це назва структури, а два змінні 'emp1' і 'emp2' створюються типу 'співробітник'. На дужках, що закриваються, слід додати крапку з комою (;).

До членів структури можна отримати доступ двох операторів:

  1. Член-оператор
  2. Структура оператора вказівника

Що таке Союз?

Це спеціальний тип даних, який використовується на C, що дозволяє користувачеві зберігати типи даних різного виду в одному місці пам'яті. Союз досить схожий на структуру, і його можна визначити, замінивши ключове слово "struct" на ключове слово "union". Члени перекривають пам’ять один одного в союзі, і він досить великий, щоб вмістити всіх його членів.

Коли змінна асоціюється з об'єднанням, компілятор виділяє пам'ять, враховуючи розмір найбільшої пам'яті, тому розмір об'єднання дорівнює розміру найбільшого члена даних. Об'єднання можна визначити з багатьма членами, але лише один член містить значення в будь-який момент часу.

Адреса однакова для всіх членів профспілки, що означає, що кожен член починає однакове зміщення. І зміна значення одного члена вплине на значення інших членів. Об’єднання можна використовувати, коли ви хочете зберегти щось, що є одним із декількох типів даних.

працівник профспілки

назва char [32];

інт вік;

плаваюча зарплата;

;

Тут ключове слово 'union' визначає союз, який досить схожий на декларацію структури. Змінна може зберігати значення рядка, яке є "ім'я працівника", ціле значення, яке є "віком працівника", або плавець, який представляє "зарплату працівника".

Різниця між структурою та союзом

1. Ключове слово

Ключове слово 'struct' використовується для визначення структури, тоді як ключове слово 'union' використовується для визначення об'єднання.

2. Виділення пам'яті

Для членів структури виділяється окремий простір пам'яті, і члени мають різні адреси, які не поділяють пам'ять. З іншого боку, спілка розділяє однаковий простір пам’яті для всіх своїх членів, тому виділяється спільне місце пам’яті.

3. Доступ для членів

Профспілка одночасно зберігає єдине значення для всіх своїх членів, роблячи доступність одночасно лише одному члену. Хоча в структурі можуть бути збережені декілька значень, тому будь-яке значення учасника можна отримати і отримати в будь-який час.

4. Розмір

Розмір структури дорівнює сумі розміру всіх членів або більше, тоді як розмір об'єднання дорівнює розміру члена найбільшого розміру.

5. Ініціалізація

У структурі декілька членів можуть бути ініціалізовані одночасно, тоді як у об'єднанні лише перший член може бути ініціалізований зі значенням його типу.

5. Значення

Структура може зберігати різні значення всіх членів і зміна значення одного члена не матиме ніякого впливу на значення інших членів. Хоча союз зберігає однакове значення для всіх своїх членів і зміна вартості одного члена вплине на цінність інших.

Структура проти Союзу

Будова Союз
Ключове слово Struct використовується для визначення структури. Ключове слово Union використовується для визначення об'єднання.
Учасники не діляться пам’яттю в структурі. Учасники діляться простором пам'яті в об'єднанні.
Будь-якого члена можна отримати в будь-який час в структурі. Одночасно в союзі можна отримати доступ до одного члена.
Одразу можна ініціалізувати декілька членів структури. Ініціалізувати може лише перший член.
Розмір структури дорівнює сумі розміру кожного члена. Розмір союзу дорівнює розміру найбільшого члена.
Змінення значення одного члена не вплине на значення іншого. Зміна вартості одного члена вплине на значення інших членів.
Зберігає різні значення для всіх членів. Зберігає однакове значення для всіх членів.

Підсумок

  • Як структура, так і об'єднання - це визначені користувачем типи даних на C, які функціонально та концептуально однакові, але в деякій мірі досить різняться.
  •  Обидва містять змінні різних типів даних, але вони використовують один і той же синтаксис для оголошення змінних та доступу до членів. У той час як структура визначається ключовим словом "struct", об'єднання визначається ключовим словом "union".
  • Кожен член отримує в структурі окреме місце пам’яті, тоді як в об'єднанні загальний об'єм пам’яті еквівалентний члену найбільшого розміру. Усі члени спільно використовують один і той же простір пам’яті.
  • Будь-який член у будь-якій послідовності може мати доступ до структури, тоді як у об'єднанні, доступ до цієї змінної може бути отримано, значення якого нещодавно зберігається.