In diesem Tutorial lernen wir anhand von Beispielen, wie leere Zeiger verwendet werden.
Bevor Sie mit diesem Tutorial fortfahren, überprüfen Sie unbedingt die C ++ - Zeiger.
In C ++ können wir die Adresse einer Variablen eines Datentyps keinem Zeiger eines anderen Datentyps zuweisen. Betrachten Sie dieses Beispiel:
// pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;
Hier ist der Fehler aufgetreten, weil die Adresse eine double
Typvariable ist. Der Zeiger ist jedoch vom int
Typ.
In solchen Situationen können wir den Zeiger auf void (void pointers) in C ++ verwenden. Beispielsweise,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
Der void-Zeiger ist ein generischer Zeiger, der verwendet wird, wenn der Datentyp der Variablen, auf die der Zeiger zeigt, nicht bekannt ist.
Beispiel 1: C ++ Void Pointer
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )
Ausgabe
0xffd117ac 0xffd117ac
Hier ptr
erhält der Zeiger den Wert von &f
.
Die Ausgabe zeigt, dass der void-Zeiger ptr die Adresse einer float
Variablen f speichert .
Da void
es sich um einen leeren Typ handelt, können leere Zeiger nicht dereferenziert werden.
void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid
Beispiel 2: Drucken des Inhalts des Leerzeigers
Um den Inhalt eines ungültigen Zeigers zu drucken, verwenden wir den static_cast
Operator. Es konvertiert den Zeiger vom void*
Typ in den jeweiligen Datentyp der Adresse, die der Zeiger speichert:
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )
Ausgabe
Der Inhalt des Zeigers ist 2.3
Dieses Programm druckt den Wert der Adresse, auf die der void
Zeiger ptr zeigt.
Da wir einen void
Zeiger nicht dereferenzieren können , können wir ihn nicht verwenden *ptr
.
Wenn wir jedoch den void*
Zeigertyp in den float*
Typ konvertieren , können wir den Wert verwenden, auf den der void
Zeiger zeigt.
In diesem Beispiel haben wir den static_cast
Operator verwendet, um den Datentyp des Zeigers von void*
nach zu konvertieren float*
.
Casting im C-Stil
Wir können auch C-Casting verwenden, um den Wert zu drucken.
// valid cout << *((float*)ptr);
Jedoch static_cast
ist bevorzugt, C-Stil Guss.
Hinweis: Leere Zeiger können nicht zum Speichern von Adressen von Variablen mit const
oder von volatile
Qualifizierern verwendet werden.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;