In deze tutorial leren we over leegte-aanwijzers en hoe je ze kunt gebruiken met behulp van voorbeelden.
Voordat u doorgaat met deze zelfstudie, moet u de C ++ - verwijzingen controleren.
In C ++ kunnen we het adres van een variabele van het ene gegevenstype niet toewijzen aan een aanwijzer van een ander gegevenstype. Beschouw dit voorbeeld eens:
// 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 is de fout opgetreden omdat het adres een double
typevariabele is. De aanwijzer is echter van het int
type.
In dergelijke situaties kunnen we de pointer gebruiken om ongeldig te verklaren (void pointers) in C ++. Bijvoorbeeld,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
De lege aanwijzer is een generieke aanwijzer die wordt gebruikt als we het gegevenstype van de variabele niet kennen waarnaar de aanwijzer verwijst.
Voorbeeld 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; )
Uitvoer
0xffd117ac 0xffd117ac
Hier krijgt de aanwijzer ptr
de waarde van &f
.
De uitvoer laat zien dat de void pointer ptr het adres van een float
variabele f opslaat .
Net void
als een leeg type, kunnen nietige verwijzingen niet worden afgeleid.
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
Voorbeeld 2: de inhoud van Void Pointer afdrukken
Om de inhoud van een lege pointer af te drukken, gebruiken we de static_cast
operator. Het converteert de aanwijzer van het void*
type naar het respectieve gegevenstype van het adres dat de aanwijzer opslaat:
#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; )
Uitvoer
De inhoud van pointer is 2.3
Dit programma drukt de waarde af van het adres void
waarnaar wordt verwezen door de pointer ptr.
Aangezien we een void
pointer niet kunnen herverwijzen , kunnen we niet gebruiken *ptr
.
Als we het void*
aanwijzertype echter naar het float*
type converteren , kunnen we de waarde gebruiken waarnaar de void
aanwijzer verwijst.
In dit voorbeeld hebben we de static_cast
operator gebruikt om het gegevenstype van de aanwijzer van void*
naar te converteren float*
.
Gieten in C-stijl
We kunnen ook C-style casting gebruiken om de waarde af te drukken.
// valid cout << *((float*)ptr);
Heeft static_cast
echter de voorkeur boven gieten in C-stijl.
Opmerking: ongeldige verwijzingen kunnen niet worden gebruikt om adressen van variabelen met const
of volatile
kwalificaties op te slaan .
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;