Különbség a struktúra és az unió között a C-ben

Mi az a Struktúra?

A struktúra egy felhasználó által definiált adattípus a C programozási nyelvben, amely a különböző adattípusok logikailag összefüggő adatelemeit kombinálja.

Az összes szerkezeti elemet összefüggő memóriahelyeken tárolják. A struktúratípus-változó egy név alatt több különböző adattípusú adatelemet is tárolhat.

Mi az az Unió

Az Unió egy felhasználó által definiált adattípus, akárcsak egy struktúra. Az Union különböző típusú és méretű tárgyakat kombinál egymással. Az unióváltozó az unió legnagyobb változójának tárolására szolgáló hellyel egyenlő memóriaterületet foglal le. Lehetővé teszi, hogy különböző típusú objektumok ugyanazt a helyet megosszák.

A deklaráló szerkezet szintaxisa

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

A struktúra deklarálása a „struct” kulcsszó és a struktúranév használatával történik. Az 1-es, a 2-es és a 3-as szám a szerkezet egyes tagjai. A testrész pontosvesszővel (;) végződik.

Példa a szerkezetre a C programozásban

#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;
}

A fenti programban egy tanuló nevű struktúra jön létre. Ennek a struktúrának három adattagja van: 1) név (karakterlánc), 2) roll_no (egész szám) és 3) marks (float).

Ezt követően létrejön egy sdt szerkezeti változó, amely tárolja a tanulói információkat és megjeleníti azokat a számítógép képernyőjén.

output:

Írja be a következő információkat:

Írja be a tanuló nevét: James

Írja be a tanulói névjegyzék számát: 21

Írja be a tanulói jegyeket: 67

Az Ön által megadott adatok a következők:

Tanuló neve: János

Tanulói névjegyzék száma: 21

Tanulói jegyek: 67.0

Az Unió deklarálásának szintaxisa

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

Az Uniót a „szakszervezet” kulcsszóval és a szakszervezet nevével deklarálják. Az 1., 2. és 3. szám a szakszervezet egyéni tagjai. A testrész pontosvesszővel (;) végződik.

Példa az Unióra a C programozásban

#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;
}

output:

1101109601

20.199892

a

A fenti programban láthatja, hogy az x és y értéke megsérül. Csak a ch változó írja ki a várt eredményt. Ez azért van így, mert az unióban a memóriahely meg van osztva az összes tag adattípusa között.

Ezért az egyetlen adattag, amelynek értéke jelenleg tárolva van, foglal helyet. A ch változó értéke végre eltárolásra került, így a többi érték is változók elveszett.

Szerkezet vs. Unió

Szerkezet vs. Unió
Szerkezet vs. Unió

Itt van a fontos különbség a struktúra és az unió között:

Szerkezet Unió
A struktúra definiálásához használhat struct kulcsszót. A szakszervezet definiálásához használhat szakszervezeti kulcsszót.
A struktúrán belül minden taghoz egyedi memóriahely tartozik. Az unióban egy memóriahelyet az összes adattag megoszt.
Egy adattag értékének módosítása nem érinti a struktúra többi adattagját. Egy adattag értékének módosítása megváltoztatja az egyesülésben lévő többi adattag értékét.
Lehetővé teszi több tag egyidejű inicializálását. Lehetővé teszi, hogy csak a szakszervezet első tagját inicializálja.
A struktúra teljes mérete minden adattag méretének összege. Az unió teljes mérete a legnagyobb adattag mérete.
Elsősorban különféle típusú adatok tárolására szolgál. Főleg a rendelkezésre álló számos adattípus egyikének tárolására szolgál.
Minden egyes belső paraméterbe írt tag számára helyet foglal. A belső paraméterekbe írt legnagyobb méretű tag számára foglal helyet.
Egyszerre bármelyik tagot letöltheti. A szakszervezetben egyszerre csak egy tag férhet hozzá.
Támogatja a rugalmas tömböt. Nem támogatja a rugalmas tömböt.

A szerkezet előnyei

Íme a szerkezet használatának előnyei/előnyei:

  • A struktúrák egynél több adatot gyűjtenek össze ugyanarról a témáról ugyanazon a helyen.
  • Akkor hasznos, ha hasonló adattípusok és paraméterek adatait szeretné összegyűjteni, mint például keresztnév, vezetéknév stb.
  • Nagyon könnyű karbantartani, mivel az egész rekordot egyetlen név használatával ábrázolhatjuk.
  • Szerkezetében egyetlen paraméter használatával a teljes rekordkészletet átadhatjuk bármely függvénynek.
  • Használhat egy tömböt a hasonló típusú rekordok tárolására.

Az egyesülés előnyei

Íme, az unió használatának előnyei/előnyei:

  • A szerkezethez képest kevesebb memóriát foglal el.
  • Az union használatakor csak az utolsó változó érhető el közvetlenül.
  • Az Unió akkor használatos, ha ugyanazt a memóriahelyet kell használnia két vagy több adattag számára.
  • Lehetővé teszi, hogy csak egy adattag adatait tárolja.
  • Lefoglalt területe megegyezik az adattag maximális méretével.

A szerkezet hátrányai

Íme a szerkezet használatának hátrányai/hátrányai:

  • Ha az informatikai projekt összetettsége túllépi a határt, akkor nehéz lesz kezelni.
  • Egy kódban egy adatstruktúra megváltoztatása sok más helyen is változtatást tesz szükségessé. Ezért a változásokat nehéz követni.
  • A szerkezet lassabb, mert tárhelyet igényel az összes adat számára.
  • Egyszerre bármelyik tagot lekérheti a struktúrában, míg a szakszervezetben egyszerre csak egy tagot érhet el.
  • A struktúra minden egyes belső paraméterben írt tag számára foglal helyet, míg az unió a belső paraméterekbe írt legnagyobb méretű tag számára foglal helyet.
  • A szerkezet támogatja a rugalmas tömböt. Az Union nem támogatja a rugalmas tömböt.

A szakszervezet hátrányai

Íme az unió használatának hátrányai/hátrányai:

  • Egyszerre csak egy szakszervezeti tagot használhat.
  • Az összes unióváltozó nem inicializálható vagy használható változó értékekkel egyszerre.
  • Az Unió minden tagja számára egy közös tárhelyet jelöl ki.

FŐ KÜLÖNBSÉGEK:

  • A struktúrán belül minden taghoz egyedi memóriahely van hozzárendelve, míg az unióban egy memóriahelyet az összes adattag megoszt.
  • Egy adattag értékének módosítása nem érinti a struktúra többi adattagját, míg egy adattag értékének megváltoztatása az egyesülésben lévő többi adattag értékét.
  • A struktúrát elsősorban különféle adattípusok tárolására használják, míg az uniót elsősorban a sok adattípus egyikének tárolására használják.
  • Szerkezetében egyszerre bármelyik tagot lekérheti, az unióban viszont egyszerre csak egy tagot érhet el.
  • A struktúra támogatja a rugalmas tömböt, míg az unió nem támogatja a rugalmas tömböt.

Tekintse meg kezdőknek szóló C oktatóanyagunkat is: - Kattints ide