C ++ pekare till ogiltig (med exempel)

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;

Intressanta artiklar...