union


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);
}

Übersicht Keywords C++