union C++ объединение переменных разных типов в общей памяти

1) Ключевое слово union или объединение является специальным видом класса и используется для сокращения занимаемой памяти данными. Типы данных, перечисленные в объединении используют одну и ту же область памяти - размером с наибольший тип.

2) Доступ к элементам объединения осуществляется как к обычным членам класса, через операторы . (точка) для объединения и -> (минус больше) для указателя на объединение.


#include <iostream>         // cout, endl
using namespace std;

union un_val{ // Перечисление для хранения аргументов и результатов имеет размер double
    bool bval;   // bool
    int ival;    // int
    double dval; // double
};

void my_func(union un_val& res){ // Функция принимает объединение res по ссылке
    res.ival = 263;  // Меняет значение ival
}

int main(){
    union un_val a; // Создаем объединение a
    a.ival = 0;     // Устанавливаем поле ival в ноль
    cout << a.ival << endl; //0
    my_func(a);             // Вызываем функцию меняющую значение ival на 10
    cout << a.ival << endl; //263      шестнадцатеричное значение 0x00000107
    cout << a.bval << endl; //7     bool занимает младший байт объединения (0x07)
    cout << a.dval << endl; //1.26975e-321  double занимает 8 байтов объединения и в старших 4х байтах "мусор"
}
2023-10-23



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

char символьный тип данных в С++ длиной 1 байт
char16_t символьный беззнаковый тип данных длиной 16 бит в С++11
char32_t символьный беззнаковый тип данных длиной 32 бит в С++11
char8_t символьный тип данных в С++20
Типы данных C++
double - тип данных для представления вещественных чисел двойной точности
enum перечисление С++
float C++ представление вещественных данных с одинарной точностью
int C++ целочисленный тип данных
Целочисленные типы С++ long и long long
short С++ целочисленный тип данных
signed C++ модификатор знакового целочисленного типа
typedef C++ создание псевдонимов для типов данных
typeid C++ определение типа данных
union C++ объединение переменных разных типов в общей памяти
unsigned С++ беззнаковые числа
void C++ для функций не возвращающих значений или задания пустого указателя
wchar_t С++ расширенный набор символов и строк