Rozdíl mezi strukturou a unií v C

Co je Struktura?

Struktura je uživatelsky definovaný datový typ v programovacím jazyce C, který kombinuje logicky související datové položky různých datových typů dohromady.

Všechny prvky struktury jsou uloženy na souvislých paměťových místech. Proměnná typu struktury může pod jedním jménem uložit více než jednu datovou položku různých datových typů.

Co je Union

Union je uživatelsky definovaný datový typ, stejně jako struktura. Union kombinuje objekty různých typů a velikostí dohromady. Sjednocovací proměnná přiděluje paměťový prostor rovný prostoru pro uložení největší proměnné sjednocení. Umožňuje různým typům objektů sdílet stejnou polohu.

Syntaxe deklarační struktury

struct [name of the structure]
   {
       type member1;
       type member2;
       type member3;
   };

Struktura je deklarována pomocí klíčového slova „struct“ a názvu struktury. Číslo 1, číslo 2, číslo 3 jsou jednotlivé členy struktury. Část těla je ukončena středníkem (;).

Příklad struktury v programování 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;
}

Ve výše uvedeném programu je vytvořena struktura nazvaná student. Tato struktura má tři datové členy: 1) název (řetězec), 2) roll_no (celé číslo) a 3) značky (float).

Poté se vytvoří strukturní proměnná sdt pro uložení informací o studentech a jejich zobrazení na obrazovce počítače.

Výstup:

Zadejte následující informace:

Zadejte jméno studenta: James

Zadejte číslo studentského seznamu: 21

Zadejte známky studentů: 67

Informace, které jste zadali, jsou:

Jméno studenta: John

Číslo studentského seznamu: 21

Známky studentů: 67.0

Syntaxe Declaring Union

union [name of union]
    {
       type member1;
       type member2;
       type member3;
    };

Union se deklaruje pomocí klíčového slova „union“ a názvu unie. Číslo 1, číslo 2, číslo 3 jsou jednotliví členové svazu. Část těla je ukončena středníkem (;).

Příklad sjednocení v programování 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;
}

Výstup:

1101109601

20.199892

a

Ve výše uvedeném programu můžete vidět, že hodnoty x a y se poškodí. Pouze proměnná ch vytiskne očekávaný výsledek. Je to proto, že v unii je umístění paměti sdíleno mezi všemi datovými typy členů.

Proto jediný datový člen, jehož hodnota je aktuálně uložena, bude zabírat místo v paměti. Hodnota proměnné ch byla nakonec uložena, takže hodnota zbytku proměnné je ztracen.

Struktura vs. svaz

Struktura vs. svaz
Struktura vs. svaz

Zde je důležitý rozdíl mezi strukturou a svazkem:

Struktura svaz
K definování struktury můžete použít klíčové slovo struct. K definování sjednocení můžete použít klíčové slovo sjednocení.
Každý člen ve struktuře má přiřazeno jedinečné místo v paměti. V unii je umístění paměti sdíleno všemi datovými členy.
Změna hodnoty jednoho datového členu neovlivní ostatní datové členy ve struktuře. Změna hodnoty jednoho datového členu změní hodnotu ostatních datových členů v unii.
Umožňuje inicializovat několik členů najednou. Umožňuje inicializovat pouze prvního člena unie.
Celková velikost struktury je součtem velikosti každého datového členu. Celková velikost sjednocení je velikost největšího datového člena.
Používá se především pro ukládání různých typů dat. Používá se hlavně pro ukládání jednoho z mnoha dostupných datových typů.
Zabírá místo pro každý člen zapsaný ve vnitřních parametrech. Zabírá místo pro člen s největší velikostí zapsanou ve vnitřních parametrech.
Můžete načíst libovolného člena najednou. V unii můžete přistupovat vždy po jednom členu.
Podporuje flexibilní pole. Nepodporuje flexibilní pole.

Výhody konstrukce

Zde jsou výhody/výhody použití struktury:

  • Struktury shromažďují více než jeden kus dat o stejném předmětu společně na stejném místě.
  • Je užitečné, když chcete shromáždit data podobných datových typů a parametrů, jako je jméno, příjmení atd.
  • Je velmi snadná na údržbu, protože můžeme reprezentovat celý záznam pomocí jediného jména.
  • Ve struktuře můžeme předat kompletní sadu záznamů jakékoli funkci pomocí jediného parametru.
  • K uložení více záznamů podobných typů můžete použít pole struktury.

Výhody spojení

Zde jsou výhody/výhody používání unie:

  • Ve srovnání se strukturou zabírá méně paměti.
  • Když použijete union, lze přímo přistupovat pouze k poslední proměnné.
  • Union se používá, když musíte použít stejné paměťové místo pro dva nebo více datových členů.
  • Umožňuje vám uchovávat data pouze jednoho datového člena.
  • Jeho přidělený prostor je roven maximální velikosti datového členu.

Nevýhody konstrukce

Zde jsou nevýhody/nevýhody použití struktury:

  • Pokud složitost IT projektu přesahuje limit, je obtížné jej řídit.
  • Změna jedné datové struktury v kódu vyžaduje změny na mnoha dalších místech. Proto je obtížné sledovat změny.
  • Struktura je pomalejší, protože vyžaduje úložný prostor pro všechna data.
  • Ve struktuře můžete načíst libovolného člena najednou, zatímco v unii máte přístup k jednomu členovi najednou.
  • Struktura zabírá místo pro každý člen zapsaný ve vnitřních parametrech, zatímco union zabírá místo pro člen s největší velikostí zapsanou ve vnitřních parametrech.
  • Struktura podporuje flexibilní pole. Union nepodporuje flexibilní pole.

Nevýhody sjednocení

Zde jsou nevýhody/nevýhody používání unie:

  • V jednu chvíli můžete použít pouze jednoho člena odboru.
  • Všechny sjednocující proměnné nelze inicializovat ani používat s různými hodnotami najednou.
  • Union přiděluje všem svým členům jeden společný úložný prostor.

KLÍČOVÉ ROZDÍLY:

  • Každému členu ve struktuře je přiřazeno jedinečné paměťové místo, zatímco v unii je paměťové místo sdíleno všemi datovými členy.
  • Změna hodnoty jednoho datového členu neovlivní ostatní datové členy ve struktuře, zatímco změna hodnoty jednoho datového členu změní hodnotu ostatních datových členů v unii.
  • Struktura se používá hlavně pro ukládání různých datových typů, zatímco sjednocení se používá hlavně pro ukládání jednoho z mnoha datových typů.
  • Ve struktuře můžete načíst libovolného člena najednou, na druhé straně v unii můžete přistupovat k jednomu členovi najednou.
  • Struktura podporuje flexibilní pole, zatímco union nepodporuje flexibilní pole.

Podívejte se také na náš C tutorial pro začátečníky: - Klikněte zde