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...

9.2.1 VOID-Pointer

9.2.1 VOID-Pointer

Zeiger auf "void" sind s.g. Dummy-Zeiger. Sie dient dazu, gerade in der objektorientierten Programmierung, Zeiger auszutauschen, welche auf unterschiedliche Datentypen zeigen können, die erst zur Laufzeit festgelegt sind. So kann man beispielsweise universelle Sortierfunktionen schreiben, die für jede Art von Datentypen funktionieren. Hier mal ein kleines Anwendungsbeispiel, in welchem ich drei Pointer auf unterschiedliche Variablentypen definiere und sie dann in ein Array aus "void" Pointern packe. Somit ist es mir quasi möglich, verschiedene Variablentypen in einem Array abzulegen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
					
int	iWert			= 4;
int*	pZeigerAufInt		= &iWert;

float	fWert			= 8.2f;
float*	pZeigerAufFloat		= &fWert;

char	cZeichen		= 'c';
char*	pZeigerAufChar		= &cZeichen;

void*	aVoidArray[3];
aVoidArray[0]			= pZeigerAufInt;
aVoidArray[1]			= pZeigerAufFloat;
aVoidArray[2]			= pZeigerAufChar;

printf(	"%i\t%g\t%c\n",
	*(int*)aVoidArray[0],
	*(float*)aVoidArray[1],
	*(char*)aVoidArray[2]);
					

Ausgabe:

4	8.2	c
		

Bis einschließlich Zeile 8 sollte alles klar sein. In Zeile 10 erzeuge ich jetzt ein Array mit drei Pointern auf "void". Anschließend Speichere ich die Adressen der Zeiger im Array ab, wobei ich hier keine Typumwandlung vornehmen muss, was eine Besonderheit ist (ansonsten muss man immer diese Konvertierung vornehmen - auch bei Zeigern). In den Zeilen 15 bis 18 gebe ich dann den Inhalt des Arrays aus, wobei hier die Typumwandlung notwendig ist. Allgemein rate ich dringend davon ab, in einem Array, mehrere verschiedene Typen zu halten, wie ich dies gerade demonstriert habe, da man keine Kontrolle bzw. Information darüber hat, was wo gespeichert ist.

Zuletzt sei noch erwähnt, dass man "void" Pointer nicht dereferenzieren kann. Zudem kann man den Wert eines "void" Pointern, nicht ohne Typumwandlung an einem anderen Pointer übergeben, welcher selbst kein "void" Pointern ist (dies war ja in der Ausgabe von eben klar zu sehen).

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012