Hallo Manny,
ich hab jetzt schon mehrfach gegoogelt und hab rausgefunden,
dass man in einer Union Variablen anlegen kann, die sich dann
den gleichen Speicherbereich teilen und die Union genauso groß
ist wie der größte Datentyp in ihr.
Stimmt.
Wenn ich so eine Union verwende und in ihr hab ich ein
float-Array und ein DWord-Array und ich schreibe an einer
Stelle was ins float-Array, was passiert dann mit dem
DWord-Array wenn ich z.B ein anderes Element daraus auslesen
will?
Das andere Element wird dadurch nicht geändert.
Wie ist das organisiert, woher weiß ich, welchen Datentyp ich
jetzt im Moment von der Union erhalte?
Tja, das ist das Problem des Programmierers.
Allerdings machen deine Überlegungen nicht einen praktischen Sinn
In meinen Programmen findet man soetwas häufiger:
typedef union
{
struct
{
int flag1 :1;
int flag2 :1;
int flag3 :1;
int flag4 :1;
} f;
int all;
} uFLAGS;
......
uSLAGS flags;
......
if ( flags.all )
{
// mindestens ein Flag ist gesetzt
if ( flags.f.flag1 ) ......
}
Eine andere Variante ist, wenn man einen float Byteweise zerlegen muss, weil er z.B. über ein 8-Bit Schnittstelle übertragen werden muss.
typedef union
{
float d;
char c[4];
} uDATA
uDATA data;
......
data.d = 3.141;
send(data.c[0]);
send(data.c[1]);
send(data.c[2]);
send(data.c[3]);
Allerdings benötigt diese Vorgehen genaue Kenntnisse über die CPU und den Compiler und ist nicht für portablen Code du verwenden.
MfG Peter(TOO)