Объединения в Си

Объединения в C

Для объявления объединений в C используют ключевое слово union. Объединение в C может содержать объявления полей разных типов, кроме типа самого данного объединения. Особенностью объединения в Си является то, что все поля объединения имеют одинаковый адрес в памяти. Это приводит к тому, что в данный момент можно определить значение только одного поля объединения в Си.

Пример union в C:

Получаем: C var parameter count

В примере объявляем объединение myUnion, а в нём 4 поля:

Объявить объединение в Си означает описать новый тип данных. И каков этот тип? union myUnion. Объявим и определим переменную uUnion типа union myUnion:

union myUnion uUnion = {150};

инициализировать можно только первую переменную объединения в C.

Память для объединения выделяется по размеру самого длинного поля, в примере это поле типа double.

Все поля объединения имеют одинаковый адрес в памяти. Когда мы определяем значение поля nInt, а мы его определили в момент инициализации:

union myUnion uUnion = {150};

то 150 храниться в памяти по общему для всех полей адресу. Когда мы определяем значение поля dDouble, то значение поля nInt стирается и на его место записывается значение поля dDouble и т.д. Это характерная особенность union в Си: в данный момент можно определить значение только одного поля объединения в Си.