Введение в 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 с реализацией кода. Вы также можете посмотреть следующие статьи, чтобы узнать больше

  1. C Ключевые слова
  2. Массивы в Си Программирование
  3. Программа Палиндром на C ++
  4. C Классы Хранения