Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
} A, B; // Описан тип данных t_num и определены две переменные А и В
Обращение к полям объединения осуществляется так же, как и к элементам структуры – с использованием оператора “точка”:
A.i = 13;
B.d = 3.14;
cout << A.i + B.d;
Если обращение к полям объединения осуществляется через указатель, то необходимо использовать оператор “стрелка”:
t_num *p = &A; // Указатель на объединение р инициализирован адресом переменной А
p -> d = 234.33; // Полю d переменной А присвоено новое значение
Передача объединений в качестве аргументов функций осуществляется точно так же, как и для структур.
В памяти члены объединения “накрывают” друг друга (располагаются по одному адресу):
d (double – 8 байт) |
i (int – 4 байта) |
А |
Если вывести на экран адреса переменной А и полей i и d
cout << &A << " " << &A.i << " " << &A.d << endl;
то будут выведены три одинаковых адреса.
Объединения не могут хранить одновременно несколько различных значений, они позволяют интерпретировать несколькими различными способами содержимое одной и той же области памяти.
Например, необходимо написать функцию обеспечивающую перестановку младшего и старшего байта короткого целого:
Short Swap (short I)
{
union t_U {
Short i;
char c [2];
} u;
u.i = I;
char ch = u.c [0];
u.c [0] = u.c [1];
u.c [1] = ch;
Дата публикования: 2014-11-28; Прочитано: 158 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!