Разлика между структура и съюз в 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. съюз

Структура Vs. съюз
Структура Vs. съюз

Ето важната разлика между структура и съюз:

структура съюз
Можете да използвате ключова дума struct, за да дефинирате структура. Можете да използвате ключова дума union, за да дефинирате съюз.
Всеки член в структурата получава уникално място в паметта. В обединението място в паметта се споделя от всички членове на данните.
Промяната на стойността на един член от данни няма да засегне други членове от данни в структурата. Промяната на стойността на един член от данни ще промени стойността на други членове от данни в обединението.
Тя ви позволява да инициализирате няколко члена наведнъж. Позволява ви да инициализирате само първия член на съюза.
Общият размер на структурата е сумата от размера на всеки член от данни. Общият размер на обединението е размерът на най-големия член на данните.
Използва се главно за съхранение на различни типове данни. Използва се главно за съхраняване на един от многото налични типове данни.
Той заема място за всеки член, записан във вътрешни параметри. Той заема място за член с най-висок размер, записан във вътрешните параметри.
Можете да извлечете всеки член наведнъж. Имате достъп до един член наведнъж в съюза.
Поддържа гъвкав масив. Не поддържа гъвкав масив.

Предимства на структурата

Ето плюсовете/ползите от използването на структура:

  • Структурите събират повече от една част от данните за една и съща тема заедно на едно и също място.
  • Полезно е, когато искате да съберете данни от подобни типове данни и параметри като име, фамилия и др.
  • Поддържа се много лесно, тъй като можем да представим целия запис с едно име.
  • В структурата можем да предадем пълен набор от записи на всяка функция, използвайки един параметър.
  • Можете да използвате масив от структура, за да съхранявате повече записи с подобни типове.

Предимства на съюза

Ето плюсовете/ползите от използването на union:

  • Той заема по-малко памет в сравнение със структурата.
  • Когато използвате обединение, само последната променлива може да бъде директно достъпна.
  • Обединението се използва, когато трябва да използвате едно и също място в паметта за два или повече члена на данните.
  • Тя ви позволява да съхранявате данни само на един член на данните.
  • Разпределеното му пространство е равно на максималния размер на члена с данни.

Недостатъци на структурата

Ето минуси/недостатъци за използване на структура:

  • Ако сложността на ИТ проекта надхвърли лимита, той става труден за управление.
  • Промяната на една структура от данни в код налага промени на много други места. Следователно промените стават трудни за проследяване.
  • Структурата е по-бавна, защото изисква място за съхранение за всички данни.
  • Можете да извлечете всеки член наведнъж в структурата, докато имате достъп до един член наведнъж в съюза.
  • Структурата заема място за всеки член, записан във вътрешни параметри, докато съюзът заема място за член с най-голям размер, записан във вътрешни параметри.
  • Структурата поддържа гъвкав масив. Union не поддържа гъвкав масив.

Недостатъци на съюза

Ето минуси/недостатъци за използване на съюз:

  • Можете да използвате само един член на съюза наведнъж.
  • Всички обединени променливи не могат да бъдат инициализирани или използвани с различни стойности наведнъж.
  • Съюзът определя едно общо място за съхранение за всички свои членове.

КЛЮЧОВИ РАЗЛИКИ:

  • На всеки член в структурата се присвоява уникално място в паметта, докато в обединението място в паметта се споделя от всички членове на данните.
  • Промяната на стойността на един член от данни няма да засегне други членове от данни в структурата, докато промяната на стойността на един член от данни ще промени стойността на други членове от данни в обединението.
  • Структурата се използва главно за съхраняване на различни типове данни, докато обединението се използва главно за съхраняване на един от многото типове данни.
  • В структурата можете да извличате всеки член наведнъж, от друга страна в съюза можете да осъществявате достъп до един член наведнъж.
  • Структурата поддържа гъвкав масив, докато union не поддържа гъвкав масив.

Вижте също нашия C урок за начинаещи: - Натисни тук