Úvod do unie C
Unie je uživatelem definovaný datový typ in c, umožňuje ukládání různých datových prvků různých datových typů do stejného paměťového místa. Poskytuje efektivní způsob využití paměti, protože v kterémkoli okamžiku je přístupný pouze k jednomu členu unie. Velikost unie by proto v kterémkoli okamžiku byla stejná jako velikost jejího největšího prvku. Ačkoli spojení je jako struktura, hlavní rozdíl je v tom, že ve struktuře je každému členu struktury přidělena oddělená paměť, zatímco v unii je to sdílená paměť, která odpovídá velikosti největšího člena.
Syntax:
Spojení lze definovat níže.
union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;
K členům Unie C lze získat přístup pomocí odkazu „UnionReference“. unie je klíčové slovo.
Příklad struktury a spojení v alokaci paměti:
Ukážeme rozdíl mezi strukturou a jednotou v alokaci paměti.
Kód:
#include
struct samp_structure
(
char name1(30);
int e_id;
float e_slry;
char name2(60);
)s;
union s_union
(
char name1(30);
int e_id;
float saly;
)u;
int main()
(
printf("size of structure :%ld bytes \n", sizeof(s));
printf("size of union : %ld bytes\n", sizeof(u));
return 0;
)
Výstup:
Příklady C unie
Podívejme se na implementaci unie C pomocí příkladů uvedených níže:
Příklad č. 1
Toto je příklad, jak definovat unii C a získat přístup ke svým členům.
Kód:
#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
printf( "record.i : %d\n", t.tint);
t.tf= 200.5;
printf( "record.f : %f\n", t.tf);
strcpy( t.tstr, "Test");
printf( "record.str : %s\n", t.tstr);
return 0;
)
Výstup :
Příklad č. 2
Níže je stejný kód jako výše, kromě toho, že tiskové příkazy byly přeskupeny.
Kód:
#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
t.tf = 200.5;
strcpy( t.tstr, "Test");
printf( "record.i : %d\n", t.tint);
printf( "record.f : %f\n", t.tf);
printf( "record.str : %s\n", t.tstr);
return 0;
)
Výstup:
Pokud se podíváte na výstup opatrně, můžete vidět, že pro int a float byly přiřazeny hodnoty odpadků, protože řetězec byl přidělen paměti, tj. Od té doby, co členové sdílejí paměť v odboru, člen, jehož hodnota je aktuálně uložena, mít přístup do paměti.
Příklad č. 3
Anonymní unie je unie, která není pojmenována, proto ji lze použít v jakékoli vnořené struktuře nebo odborech. K členům anonymního svazu lze přímo přistupovat v rámci jejich definice. Podobně lze Anonymní strukturu použít uvnitř anonymního spojení.
Syntaxe anonymního spojení a struktury takto:
// Anonymous union example
union
(
char anoUChar;
int anoUNum;
);
// Anonymous structure example
struct
(
char anoSChar;
int anoSNum;
);
Příklad anonymního spojení struktur uvnitř struktury:
#include
struct testscope
(
// Anonymous union
union
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
struct testscope ts;
ts.testNum = 65;
// Note that members of union are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)
Výstup:
Testchar byla přiřazena hodnota „A“, protože poslední hodnota v unijní paměti je 65, která byla přiřazena testNum, proto je vytištěn odpovídající znak ASCII.
Poznámka: Členové unie jsou přístupní přímo.Příklad anonymní struktury uvnitř odboru:
#include
union testscope
(
// Anonymous union
struct
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
union testscope ts;
ts.testNum = 65;
ts.testChar='V';
//Note: The members of struct are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)
Výstup:
Závěr
Spojení tak pomáhá při efektivní správě paměti. Nevýhodou svazku je, že bude k dispozici pouze poslední zadaná hodnota pro svazek. Měl by se použít, když členové svazu nemusí být přístupní současně.
Doporučené články
Toto je průvodce C Union. Zde diskutujeme úvod, syntaxi a různé příklady spojení s implementací kódu. Další informace naleznete také v následujících článcích
- C Klíčová slova
- Pole v programování v C
- Program Palindrome v C ++
- C Třídy úložiště