Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

8.6 Unions

8.6 Unions

Ich habe lange überlegt, ob ich dieses Thema mit in mein Tutorial aufnehme, da Unions etwas sehr merkwürdiges sind und ich sie zudem selten benötigt. Im Grunde kann man mit ihnen mehrere Variablentypen in einem Abbilden. Dabei wird immer der Speicherplatz benötigt, welcher dem des größten Datentyps entspricht. Dabei ist aber zu beachten, dass zwar der gleiche Speicherplatz genutzt wird, jener aber entsprechend interpretiert werden muss. Die Union sorgt nicht dafür, dass ein automatisches typecast durchgeführt wird! Wie ich das meine, verdeutlicht unten stehendes Beispiel.

Das Schema sieht so aus: union <NameDesUnionTyps> {<Typ> <Name>; [...]};

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
					
union IntAndDouble {
	int	AsInt;
	double	AsDouble;
};

// ...

IntAndDouble uZahl;

uZahl.AsInt = 15;
printf("Als Ganzzahl:        %i\n", uZahl.AsInt);
printf("Unbestimmt:          %i\n", uZahl.AsDouble);
printf("Unbestimmt:          %g\n\n", uZahl.AsDouble);

uZahl.AsDouble = 15.3;
printf("Als gebrochene Zahl: %g\n", uZahl.AsDouble);
printf("Unbestimmt:          %g\n", uZahl.AsInt);
printf("Unbestimmt:          %i\n", uZahl.AsInt);
					
Als Ganzzahl:        15
Unbestimmt:          15
Unbestimmt:          -9.25596e+061

Als gebrochene Zahl: 15.3
Unbestimmt:          1.2732e-314
Unbestimmt:          -1717986918
		

Wie Sie sehen können, muss man sich irgendwo merken, was man zuletzt in der Union gespeichert hat und wie dies dann zu interpretieren ist. Da dies im Allgemeinen zu Verwirrungen führen kann, rate ich davon ab, diesen Datentyp für solche gezeigten Aktionen zu benutzen.

Im Internet findet man zu diesem Thema auch teilweise Konstrukte, in welchem in einer Union eine Matrix und ein Vektor enthalten ist, sprich ein zweidimensionales und ein eindimensionales Array. Dieser Anwendungsfall macht sogar teilweise Sinn, gerade wenn es um das Erzeugen des Speichers geht. Nichts desto trotz ist so etwas im Nachhinein nur noch schwer nachvollziehbar und somit nur für Profis interessant.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012