Вступ до C Союзу
Union - це визначений користувачем тип даних в c, він дозволяє зберігати різні елементи даних різних типів даних, які можуть зберігатися в одному і тому ж місці пам'яті. Це забезпечує ефективний спосіб використання пам'яті, оскільки лише один член спілки може отримати доступ у будь-який момент часу. Отже, розмір об'єднання в будь-який момент часу був би рівним розміру його найбільшого елемента. Хоча об'єднання схоже на структуру, головна відмінність полягає в тому, що в структурі виділяється окрема пам'ять для кожного члена структури, тоді як в об'єднанні це спільна пам'ять, що еквівалентна розміру найбільшого члена.
Синтаксис:
Об'єднання можна визначити як нижче.
union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;
Доступ до членів Союзу C можна отримати за допомогою посилання "UnionReference". union - ключове слово.
Приклад структури та об'єднання в розподілі пам'яті:
Покажемо різницю між структурою та об'єднанням у розподілі пам'яті.
Код:
#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
Давайте подивимось на реалізацію 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 з реалізацією коду. Ви також можете переглянути наступні статті, щоб дізнатися більше -
- C Ключові слова
- Масиви в програмуванні на С
- Програма Palindrome на C ++
- C Класи зберігання