Объединения

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

Синтаксис описания объединения следующий.

union

{

тип поле1;

тип поле2;

} идентификатор1, идентификатор2, …;

Схематически переменная типа объединения представлена на Рис. 48. Размер, который занимает переменная типа объединения, равен размеру максимального поля.

Рис. 48

Доступ к конкретному полю такой же, как для структур.

идентификатор.поле

Тип значения, которое будет доступно по такому обращению, соответствует типу параметра поле.

Также как и для структур возможно описание тега объединения.

union тег

{

тип поле1;

тип поле2;

};

Тогда переменную можно описать как

union тег идентификатор;

Ключевое слово union может быть опущено.

В примере реализована передача значения произвольного типа в некоторую функцию.

enum e_val_type

{

VT_INT,

VT_LONG,

VT_SHORT,

VT_FLOAT,

VT_DOUBLE

};

union u_val

{

int int_val;

long long_val;

short short_val;

float float_val;

double double_val;

};

void func(u_val val, e_val_type type)

{

switch(type)

{

case VT_INT:

//обработка значения типа int

cout << val.int_val;

break;

case VT_LONG:

//обработка значения типа long

cout << val.long_val;

break;

case VT_SHORT:

//обработка значения типа short

cout << val.short_val;

break;

case VT_FLOAT:

//обработка значения типа float

cout << val.float_val;

break;

case VT_DOUBLE:

//обработка значения типа double

cout << val.double_val;

break;

}

}

void main()

{

u_val param;

param.float_val = 178.6f;

func(param, VT_FLOAT);

}

В главной функции переменной param присваивается значение типа float. Далее значение передается в функцию, в которую также передается тип значения, описанный в перечислении e_val_type. В самой функции проверяется тип переданного значения и выполнятся те операции, которые необходимо выполнить именно со значением этого типа.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: