Nein, die verschiedenen Elemente werden auf dem gleichen Speicherbereich dargestellt.
Du mußt Dir natürlich durch entsprechend Logik sicherstellen, daß jeweils das richtige Element (mit dem richtigen Typ) verwendet wird.
Stell Dir zB. mal vor, Du hast eine Datenstruktur, von der es 3 Untertypen gibt (ein konkrete Instanz hat stets genau einen Untertypen A, B oder C).
Dann könnte das in C so aussehen:
struct FOO {
char type;
union {
struct {
int x;
int y;
...
} variant_a;
struct {
long a;
char* foo;
...
} variant_b;
struct {
DIR* cwd;
char* foo;
long x;
...
} variant_c;
} variants;
};
Bei der Allokation speicherst Du dann die Variante im Feld "type", und bei jedem Zugriff wird anhand dessen unterschieden, welcher Untertyp nun angesprochen wird, zB:
switch (myfoo.type)
{
case 'A':
printf("Type A: %d, %d\n", myfoo.variants.variant_a.x, myfoo.variants.variant_a.y);
break;
case 'B':
....
}