Разлика между структура и съюз в C
Какво е структура?
Структурата е дефиниран от потребителя тип данни в езика за програмиране C, който комбинира логически свързани елементи от различни типове данни заедно.
Всички структурни елементи се съхраняват в съседни места в паметта. Променливата тип структура може да съхранява повече от един елемент от данни от различни типове данни под едно име.
Какво е съюз
Union е тип данни, дефиниран от потребителя, точно като структура. Съюзът комбинира обекти от различни видове и размери заедно. Променливата union разпределя пространството в паметта, равно на пространството за съхранение на най-голямата променлива на union. Позволява на различни типове обекти да споделят едно и също местоположение.
Синтаксис на декларираща структура
struct [name of the structure]
{
type member1;
type member2;
type member3;
};
Структурата се декларира с помощта на ключовата дума „struct“ и името на структурата. Номер 1, номер 2, номер 3 са отделни членове на структурата. Частта на тялото завършва с точка и запетая (;).
Пример за структура в C програмиране
#include <stdio.h>
struct student {
char name[60];
int roll_no;
float marks;
} sdt;
int main() {
printf("Enter the following information:\n");
printf("Enter student name: ");
fgets(sdt.name, sizeof(sdt.name), stdin);
printf("Enter student roll number: ");
scanf("%d", & sdt. roll_no);
printf("Enter students marks: ");
scanf("%f", & sdt.marks);
printf("The information you have entered is: \n");
printf("Student name: ");
printf("%s", sdt.name);
printf("Student roll number: %d\n", sdt. roll_no);
printf("Student marks: %.1f\n", sdt.marks);
return 0;
}
В горната програма се създава структура, наречена студент. Тази структура има три елемента от данни: 1) име (низ), 2) roll_no (цяло число) и 3) знаци (float).
След това се създава структурна променлива sdt за съхраняване на информация за учениците и показването й на екрана на компютъра.
Изход:
Въведете следната информация:
Въведете името на ученика: Джеймс
Въведете номер на ученика: 21
Въведете оценките на учениците: 67
Информацията, която сте въвели е:
Име на ученика: Джон
Номер на ученическия списък: 21
Оценки на учениците: 67.0
Синтаксис на деклариране на съюз
union [name of union]
{
type member1;
type member2;
type member3;
};
Съюзът се декларира с помощта на ключовата дума „съюз“ и името на съюза. Номер 1, номер 2, номер 3 са индивидуални членове на съюза. Частта на тялото завършва с точка и запетая (;).
Пример за обединение в C програмиране
#include <stdio.h>
union item
{
int x;
float y;
char ch;
};
int main( )
{
union item it;
it.x = 12;
it.y = 20.2;
it.ch = 'a';
printf("%d\n", it.x);
printf("%f\n", it.y);
printf("%c\n", it.ch);
return 0;
}
Изход:
1101109601
20.199892
a
В горната програма можете да видите, че стойностите на x и y се повреждат. Само променливата ch отпечатва очаквания резултат. Това е така, защото в обединението местоположението на паметта се споделя между всички типове данни на членовете.
Следователно единственият член на данните, чиято стойност се съхранява в момента, ще заема място в паметта. Стойността на променливата ch беше съхранена най-накрая, така че стойността на останалата част от променливи Е загубен.
Структура Vs. съюз

Ето важната разлика между структура и съюз:
| структура | съюз |
|---|---|
| Можете да използвате ключова дума struct, за да дефинирате структура. | Можете да използвате ключова дума union, за да дефинирате съюз. |
| Всеки член в структурата получава уникално място в паметта. | В обединението място в паметта се споделя от всички членове на данните. |
| Промяната на стойността на един член от данни няма да засегне други членове от данни в структурата. | Промяната на стойността на един член от данни ще промени стойността на други членове от данни в обединението. |
| Тя ви позволява да инициализирате няколко члена наведнъж. | Позволява ви да инициализирате само първия член на съюза. |
| Общият размер на структурата е сумата от размера на всеки член от данни. | Общият размер на обединението е размерът на най-големия член на данните. |
| Използва се главно за съхранение на различни типове данни. | Използва се главно за съхраняване на един от многото налични типове данни. |
| Той заема място за всеки член, записан във вътрешни параметри. | Той заема място за член с най-висок размер, записан във вътрешните параметри. |
| Можете да извлечете всеки член наведнъж. | Имате достъп до един член наведнъж в съюза. |
| Поддържа гъвкав масив. | Не поддържа гъвкав масив. |
Предимства на структурата
Ето плюсовете/ползите от използването на структура:
- Структурите събират повече от една част от данните за една и съща тема заедно на едно и също място.
- Полезно е, когато искате да съберете данни от подобни типове данни и параметри като име, фамилия и др.
- Поддържа се много лесно, тъй като можем да представим целия запис с едно име.
- В структурата можем да предадем пълен набор от записи на всяка функция, използвайки един параметър.
- Можете да използвате масив от структура, за да съхранявате повече записи с подобни типове.
Предимства на съюза
Ето плюсовете/ползите от използването на union:
- Той заема по-малко памет в сравнение със структурата.
- Когато използвате обединение, само последната променлива може да бъде директно достъпна.
- Обединението се използва, когато трябва да използвате едно и също място в паметта за два или повече члена на данните.
- Тя ви позволява да съхранявате данни само на един член на данните.
- Разпределеното му пространство е равно на максималния размер на члена с данни.
Недостатъци на структурата
Ето минуси/недостатъци за използване на структура:
- Ако сложността на ИТ проекта надхвърли лимита, той става труден за управление.
- Промяната на една структура от данни в код налага промени на много други места. Следователно промените стават трудни за проследяване.
- Структурата е по-бавна, защото изисква място за съхранение за всички данни.
- Можете да извлечете всеки член наведнъж в структурата, докато имате достъп до един член наведнъж в съюза.
- Структурата заема място за всеки член, записан във вътрешни параметри, докато съюзът заема място за член с най-голям размер, записан във вътрешни параметри.
- Структурата поддържа гъвкав масив. Union не поддържа гъвкав масив.
Недостатъци на съюза
Ето минуси/недостатъци за използване на съюз:
- Можете да използвате само един член на съюза наведнъж.
- Всички обединени променливи не могат да бъдат инициализирани или използвани с различни стойности наведнъж.
- Съюзът определя едно общо място за съхранение за всички свои членове.
КЛЮЧОВИ РАЗЛИКИ:
- На всеки член в структурата се присвоява уникално място в паметта, докато в обединението място в паметта се споделя от всички членове на данните.
- Промяната на стойността на един член от данни няма да засегне други членове от данни в структурата, докато промяната на стойността на един член от данни ще промени стойността на други членове от данни в обединението.
- Структурата се използва главно за съхраняване на различни типове данни, докато обединението се използва главно за съхраняване на един от многото типове данни.
- В структурата можете да извличате всеки член наведнъж, от друга страна в съюза можете да осъществявате достъп до един член наведнъж.
- Структурата поддържа гъвкав масив, докато union не поддържа гъвкав масив.
Вижте също нашия C урок за начинаещи: - Натисни тук
