Объединения в C
Для объявления объединений в C используют ключевое слово union. Объединение в C может содержать объявления полей разных типов, кроме типа самого данного объединения. Особенностью объединения в Си является то, что все поля объединения имеют одинаковый адрес в памяти. Это приводит к тому, что в данный момент можно определить значение только одного поля объединения в Си.
Пример union в C:
Получаем:
В примере объявляем объединение myUnion, а в нём 4 поля:
Объявить объединение в Си означает описать новый тип данных. И каков этот тип? union myUnion. Объявим и определим переменную uUnion типа union myUnion:
инициализировать можно только первую переменную объединения в C.
Память для объединения выделяется по размеру самого длинного поля, в примере это поле типа double.
Все поля объединения имеют одинаковый адрес в памяти. Когда мы определяем значение поля nInt, а мы его определили в момент инициализации:
то 150 храниться в памяти по общему для всех полей адресу. Когда мы определяем значение поля dDouble, то значение поля nInt стирается и на его место записывается значение поля dDouble и т.д. Это характерная особенность union в Си: в данный момент можно определить значение только одного поля объединения в Си.