- •ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
- •Объединения
- •Пример выделения памяти
- •Компилятор не следит за тем, что делается с объединением после присваивания
- •union { int ax;
- •Свойства
- •Допустимые операции
- •Возможные ошибки
- •Назначение
- •Битовые поля (bit fields)
- •Тип данных
- •Нельзя
- •Формат
- ••struct number { unsigned group: 4; // 4 бита от 0 до 15
- •Неименованные поля
- •Поле нулевой длины
- •Свойства
- •Назначение
- •Пример
- •Перечисления (enumeration )
- •Тип данных
- •Формат
- •Пример
- •Пример
- •Свойства
- •Инициализация
- •Инициализация
- •Инициализация
- •Инициализация
- •Основные операции
- •Передача в функции
ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
•– структуры (structure),
•– объединения (union),
•– перечисляемый тип (enumeration),
•– поля битов (bit fields),
•– с помощью оператора typedef создать новое имя (псевдоним) для уже существующего типа.
Объединения
• |
Именованная совокупность данных |
|
разных типов, размещаемая с учетом |
|
выравнивания в одной и той же области |
|
памяти, размер которой достаточен для |
|
хранения наибольшего элемента. |
• |
формат |
•union идентификатор_объединения {
•описание элемента 1;
•………………….
•описание элемента n; };
Пример выделения памяти
MEM
long ll;
int ii[2];
char cc[4];
int xx;
Компилятор не следит за тем, что делается с объединением после присваивания
•x.f = 2.222
•cout << x.1 // будет выведен
«мусор»
union { int ax;
char a1[4]; } A;
•Объединение A позволяет получить отдельный доступ к каждому из
байтов A.al[0], A.al[1], A.al[2] ,
A.al[3] четырехбайтного числа A.ax.
Свойства
•Данные-члены перекрывают друг друга
•Все члены размещаются, начиная с одного и того же адреса
•В любой момент времени можно присвоить значение лишь одному такому члену
•Не бывает статических членов
•Не бывает членов, являющихся ссылками
Допустимые операции
=
&
. ->
Возможные ошибки
//Не могут выполняться операции сравнения
Назначение
•для экономии памяти, когда объединяемые элементы логически существуют в разные моменты времени
•для разнотипной интерпретации поля данных (управление памятью)