wird von C oder C++ genutzt, um eine zusammengehörige Anzahl von
Variablen im Rahmen eines einzigen Datentyps
zu speichern.
Die einzelnen Variablen im Datentyp union
werden analog zur struct über
den Punkt-Operator
angesprochen.
Im nachfolgenden Beispiel werden in der Variable union_Variable vom Typ
union vier unterschiedliche Variablen gespeichert. Der
Gesamtspeicherbedarf entspricht der Variable mit dem höchsten
Speicherbedarf.
int main()
{
union
{ int a;
float b;
double c;
char d;
} union_Variable;
union_Variable.a = 32;
std::cout << union_Variable.a;
std::cout << '\2' << NL;
std::cout << union_Variable.b;
std::cout << '\2' << NL;
std::cout << union_Variable.c;
std::cout << '\2' << NL;
std::cout << union_Variable.d;
std::cout << '\2' << NL;
}
Ausgabe:
32☻
4.48416e-044☻
1.58101e-322☻
☻
Man erhält damit
Interpretationen des Integers 32 als float, double und char. Wie man
sieht, entspricht der Integer-Wert 32 dem "Space"-character. Die
Beziehungen zu float und double sind ebenfalls sichtbar.
In der modernen Programmierung sollte man diesen Datentyp wegen der
Fehlerträchtigkeit nur für wenige Speziallfälle einsetzen.
Hier ein Beispiel:
#include <cstdio>
int main()
{
typedef
union
union_bitfeld
{
short
int
value;
struct bitfeld_16
{
unsigned int bit00 : 1;
unsigned int bit01 : 1;
unsigned int bit02 : 1;
unsigned int bit03 : 1;
unsigned int bit04 : 1;
unsigned int bit05 : 1;
unsigned int bit06 : 1;
unsigned int bit07 : 1;
unsigned int bit08 : 1;
unsigned int bit09 : 1;
unsigned int bit10 : 1;
unsigned int bit11 : 1;
unsigned int bit12 : 1;
unsigned int bit13 : 1;
unsigned int bit14 : 1;
unsigned int bit15 : 1;
} bitfeld;
} ubf16;
ubf16
binaerdarstellung;
binaerdarstellung.value
= 20000;
printf("%d -
%1d%1d%1d%1d%1d%1d%1d%1d %1d%1d%1d%1d%1d%1d%1d%1d",
binaerdarstellung.value,
binaerdarstellung.bitfeld.bit15,
binaerdarstellung.bitfeld.bit14,
binaerdarstellung.bitfeld.bit13,
binaerdarstellung.bitfeld.bit12,
binaerdarstellung.bitfeld.bit11,
binaerdarstellung.bitfeld.bit10,
binaerdarstellung.bitfeld.bit09,
binaerdarstellung.bitfeld.bit08,
binaerdarstellung.bitfeld.bit07,
binaerdarstellung.bitfeld.bit06,
binaerdarstellung.bitfeld.bit05,
binaerdarstellung.bitfeld.bit04,
binaerdarstellung.bitfeld.bit03,
binaerdarstellung.bitfeld.bit02,
binaerdarstellung.bitfeld.bit01,
binaerdarstellung.bitfeld.bit00);
}