17. С/С++ Объединения (Union)

Объединения (union)

Одной из наиболее удобных вещей на мой взгляд являются объединения (в языке C они более употребимы)

Что это такое:
Как известно в памяти лежит какая-то информация, набор Байт, и всевозможные short, long, int это лишь способ представить эти данные, так вот, с помощью union можно «сказать» что в этой области памяти лежит например:
массив из 20 Байт, который также является структурой, и который также является массивом из 5 long и тд.

И за счет такого обращения можно без лишних затрат ресурсов принимать и обрабатывать данные.

Общий вид объединения представлен ниже:

union Data
{
   char Arr[20];
   long l_Arr[5];
   struct …;
} ;

как в случае с структурами и классами – у union можно создавать экземпляры

Data Data1;

Обращение к элементам также происходит через точку.
И также как у структур можно создавать экземпляры сразу.
union Data
{

}Data2 ;

Важно учесть, что изменение, например Data1. l_Arr[0]=0;
автоматически изменит остальные данные в объединении(т.е. 4 байта в char Arr что-то в структуре и тд.)

Выравнивание:
Также стоит оговориться, что компилятор может проводить выравнивание (дополнять для достижения удобных компилятору и вычислению границ)

Для отмены выравниваний используется ключевое слово #pragma pack

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *