c source
-
/* Beispiel fuer union */ #include <stdio.h> /* Definitionen per Precompiler */ #define INT 1 #define DOUBLE 2 #define CHAR 3 void main (void) { struct UnionDaten { int Typ; union UTypen { int Integer; double Double; char Zeichen; } TypenWert; } Daten; /* Integer */ Daten.Typ = INT; Daten.TypenWert.Integer = 3; printf ("\n Integerwert = %d\n", Daten.TypenWert.Integer); /* Double */ Daten.Typ = DOUBLE; Daten.TypenWert.Double = 1.1415; printf ("\n Double = %f\n", Daten.TypenWert.Double); /* Zeichen */ Daten.Typ = CHAR; Daten.TypenWert.Zeichen = 'x'; printf ("\n Zeichen = %c\n", Daten.TypenWert.Zeichen); }
kann mir einer erklären welchen sind diesen zeilen haben?
Daten.Typ = INT;
Daten.Typ = DOUBLE;
Daten.Typ = CHAR;ich weis das anstatt int im endeffekt 1 da steht aber welchen sinn hat das?
-
INT, DOUBLE und CHAR sind Konstanten. Der Präprozessor wechselt im Quelltext alle Zeichenfolgen diesen Typs mit den dahinterstehenden Werten aus. Dies dient lediglich zur Übersicht für den Programmierer, der Compiler bekommt davon nichts mit. (Siehe auch die Kommentarzeile über den #define Anweisungen)
-
Damit Du weißt welchen Bezeichner aus der Union Du verwenden darfst...
Wenn Du Daten.Typ=INT setzt kannst Du nicht Daten.TypenWert.Double = 1.1415 machen (eventuell geht es schon führt aber keinesfalls zum gewünschten Ergebniss
)
Es ist aber nur damit der Nutzer der Klasse weiß was gespeichert wurde, dem Compiler müsste das im Endeffekt egal sein.Es ist halt wie der Kommentar zu beginn sagt ein Beispielcode für Union (Alle Member einer Union zeigen auf den gleichen Bereich im Speicher wenn ich mich recht entsinne). In dem entsprechenden Tut wo Du das herhast müsste doch eine Erklärung dazu stehen?
-
wenn das da so drin stehn würd das i es verstanden hät dann hät i ja hier net nachgefragt ne?
-
Hast Du es denn jetzt anhand der Erklärungen verstanden, oder sind noch Fragen offen?
-
eigentlich so mehr oder weniger verstanden
muss mich halt noch a bisle mit dem zeug auseinandersetzen
da es neu für mich ist