Введение в C Union
Union - это определенный пользователем тип данных в c, он позволяет хранить различные элементы данных разных типов, которые будут храниться в одной и той же ячейке памяти. Он обеспечивает эффективный способ использования памяти, поскольку в любой данный момент времени может быть доступен только один член объединения. Поэтому размер объединения в любой момент времени будет равен размеру его наибольшего элемента. Хотя объединение похоже на структуру, основное отличие состоит в том, что в структуре выделенная память выделяется для каждого члена структуры, тогда как в объединении это разделяемая память, которая эквивалентна размеру наибольшего члена.
Синтаксис:
Союз может быть определен как ниже.
union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;
Доступ к членам C Union можно получить по ссылке «UnionReference». союз является ключевым словом.
Пример структуры и объединения в распределении памяти:
Продемонстрируем разницу между структурой и объединением в распределении памяти.
Код:
#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;
)
Выход:
Примеры С Союза
Давайте посмотрим реализацию C Union с помощью примеров, упомянутых ниже:
Пример № 1
Это пример определения объединения C и доступа к его членам.
Код:
#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;
)
Выход :
Пример № 2
Ниже приведен тот же код, что и выше, за исключением того, что операторы печати были переставлены.
Код:
#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;
)
Выход:
Если вы внимательно посмотрите на вывод, вы увидите, что значения мусора были назначены для int и float, потому что строка была выделена памяти, наконец, то есть, поскольку члены совместно используют память в объединении, член, значение которого в настоящий момент хранится, будет иметь доступ к памяти.
Пример № 3
Анонимный союз - это союз, который не назван, поэтому их можно использовать внутри любой вложенной структуры или объединений. Члены анонимного союза могут быть напрямую доступны в рамках их определения. Аналогично, анонимная структура может использоваться внутри анонимного объединения.
Синтаксис анонимного объединения и структура следующим образом:
// Anonymous union example
union
(
char anoUChar;
int anoUNum;
);
// Anonymous structure example
struct
(
char anoSChar;
int anoSNum;
);
Пример анонимного объединения структур внутри структуры:
#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;
)
Выход:
Испытательному символу было присвоено значение «A», поскольку последнее значение в объединяющей памяти равно 65, которое было присвоено testNum, поэтому печатается соответствующий символ ASCII.
Примечание: доступ к членам союза осуществляется напрямую.Пример анонимной структуры внутри объединения:
#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;
)
Выход:
Вывод
Таким образом, союз помогает эффективно управлять памятью. Недостаток объединения состоит в том, что будет доступно только последнее введенное значение для объединения. Его следует использовать, когда члены профсоюза не должны быть доступны для одновременного доступа.
Рекомендуемые статьи
Это руководство по C Union. Здесь мы обсуждаем введение, синтаксис и различные примеры c union с реализацией кода. Вы также можете посмотреть следующие статьи, чтобы узнать больше
- C Ключевые слова
- Массивы в Си Программирование
- Программа Палиндром на C ++
- C Классы Хранения