Объединения (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