Регистрация
17 Мар 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Пытаюсь изучить С++ и возник вопрос, который не входит в курс. Вообщем, в курсе расскзывается про структуры и объединения. Приводят два примера.
Пример 1 : struct Value {
enum NumberType { ShortType, LongType,
DoubleType };
NumberType type;
short sx; // если type равен ShortType
long lx; // если type равен LongType
double dx; // если type равен DoubleType
};
Пример 2 : struct Value {
enum NumberType { ShortType, LongType,
DoubleType };
NumberType type;
union number {
short sx; // если type равен ShortType
long lx; // если type равен LongType
double dx; // если type равен DoubleType
} val;
};

После говорится, что в 2 примере память выделена только для максимального из этих трех атрибутов (в данном случае dx ). Однако и обращаться с объединением надо осторожно. Поскольку все три атрибута делят одну и ту же область памяти, изменение одного из них означает изменение всех остальных. На рисунке поясняется выделение памяти под объединение. В обоих случаях мы предполагаем, что структура расположена по адресу 1000. Объединение располагает все три своих атрибута по одному и тому же адресу.

Сообственно вопрос, как работает это объединение трёх переменных в одном адресе? посоветуйте, какую-либо книгу или ответьте так, чтобы любому чайнику было понятно, как всё это дело работает.
//otvet.imgsmail.ru/download/226977921_5178166a41be2b9b8b786a97e2cb5035_800.gif
 
Назад
Сверху