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 doubletypvariabel. Men pekaren är av inttyp.
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 ptrges pekaren värdet på &f.
Utgången visar att tomrumspekaren ptr lagrar adressen till en floatvariabel f.
Som voiden 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_castoperatö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 voidpekaren ptr pekar på.
Eftersom vi inte kan avleda en voidpekare kan vi inte använda *ptr.
Men om vi konverterar void*pekartypen till float*typen kan vi använda det värde som voidpekaren pekar på.
I det här exemplet har vi använt static_castoperatö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 consteller volatilekvalificeringsspelare.
 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;








