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 doubleTypvariable ist. Der Zeiger ist jedoch vom intTyp.
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 ptrerhält der Zeiger den Wert von &f.
Die Ausgabe zeigt, dass der void-Zeiger ptr die Adresse einer floatVariablen f speichert .
Da voides 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_castOperator. 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 voidZeiger ptr zeigt.
Da wir einen voidZeiger 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 voidZeiger zeigt.
In diesem Beispiel haben wir den static_castOperator 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_castist bevorzugt, C-Stil Guss.
Hinweis: Leere Zeiger können nicht zum Speichern von Adressen von Variablen mit constoder von volatileQualifizierern verwendet werden.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;








