I den här handledningen lär vi oss om ogiltiga pekare och hur man använder dem med hjälp av exempel.
Innan du fortsätter med den här självstudien, se till att kontrollera C ++ - pekare.
I C ++ kan vi inte tilldela adressen till en variabel av en datatyp till en pekare av en annan datatyp. Tänk på detta exempel:
// 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;
Här inträffade felet eftersom adressen är en double
typvariabel. Men pekaren är av int
typ.
I sådana situationer kan vi använda pekaren för att ogiltiga (ogiltiga pekare) i C ++. Till exempel,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
Den ogiltiga pekaren är en generisk pekare som används när vi inte känner till datatypen för variabeln som pekaren pekar på.
Exempel 1: C ++ ogiltig pekare
#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; )
Produktion
0xffd117ac 0xffd117ac
Här ptr
ges pekaren värdet på &f
.
Utgången visar att tomrumspekaren ptr lagrar adressen till en float
variabel f.
Som void
en tom typ kan ogiltiga pekare inte hänvisas till andra.
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
Exempel 2: Skriva ut innehållet i ogiltig pekare
För att skriva ut innehållet i en tom pekare använder vi static_cast
operatören. Den konverterar pekaren från void*
typ till respektive datatyp för adressen som pekaren lagrar:
#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; )
Produktion
Pekarens innehåll är 2.3
Detta program skriver ut värdet på adressen som void
pekaren ptr pekar på.
Eftersom vi inte kan avleda en void
pekare kan vi inte använda *ptr
.
Men om vi konverterar void*
pekartypen till float*
typen kan vi använda det värde som void
pekaren pekar på.
I det här exemplet har vi använt static_cast
operatören för att konvertera pekarens datatyp från void*
till float*
.
C-stil gjutning
Vi kan också använda gjutning i C-stil för att skriva ut värdet.
// valid cout << *((float*)ptr);
Emellertid static_cast
är föredraget att C-stil gjutning.
Obs! Ogiltiga pekare kan inte användas för att lagra adresser till variabler med const
eller volatile
kvalificeringsspelare.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;