C ++ Zeiger auf ungültig (mit Beispielen)

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;

Interessante Beiträge...