Разлика между структура и съюз в 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 урок за начинаещи: - Натисни тук