Информатика и технология программирования

       

Объединения


Объединение представляет собой структурированную переменную с несколько иным способом размещения элементов в памяти. Если в структуре (как и в массиве) элементы расположены последовательно друг за другом, то в объединении "параллельно". То есть для их размещения выделяется одна общая память, в которой они перекрывают друг друга и имеют в ней общий адрес. Размерность ее определяется максимальной размерностью элемента объединения. Синтаксис объединения полностью совпадает с синтаксисом структуры, только ключевое слово struct заменяется на union :


union memo
{
long ll;
int ii[2];
char cc[4];
int xx;
} MEM;

Назначение объединения заключается не в экономии памяти, как может показаться на первый взгляд. На самом деле оно является одним из инструментов управления памятью на принципах, принятых в Си. Ниже (в 4.4) мы увидим, как использование указателей различных типов позволяет реализовать эти принципы. Здесь же, не вдаваясь в подробности, отметим одно важное свойство: если записать в один элемент объединения некоторое значение, то через другой элемент это же значение можно прочитать уже в другой форме представления (как переменную другого типа). То есть форму представления данных в памяти можно менять совершенно свободно.

.


char z;
// 3 2 1 0


// -¬-¬-¬-¬ Элемент ll размещается в MEM,


MEM.ll = 0x12345678; // начиная с младшего байта


z = MEM.cc[2]; // Второй байт в массиве байтов cc


// в MEM имеет значение 0x34


// Результат: z получает значение


// второго байта длинного целого

Естественно, что при таком манипулировании внутренним представлением данных, необходимо знать их форматы и размерность.



Содержание раздела