C ++ markør til ugyldighed (med eksempler)

I denne vejledning lærer vi om ugyldige markører, og hvordan man bruger dem ved hjælp af eksempler.

Før du fortsætter med denne vejledning, skal du kontrollere C ++ - markører.

I C ++ kan vi ikke tildele adressen til en variabel af en datatype til en markør af en anden datatype. Overvej dette eksempel:

 // 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;

Her opstod fejlen, fordi adressen er en doubletypevariabel. Markøren er dog af inttypen.

I sådanne situationer kan vi bruge markøren til at annullere (ugyldige markører) i C ++. For eksempel,

 // void pointer void *ptr; double d = 9.0; // valid code ptr = &d;

Den ugyldige markør er en generisk markør, der bruges, når vi ikke kender datatypen for den variabel, som markøren peger på.

Eksempel 1: C ++ ugyldig markør

 #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

Her får markøren ptrværdien af &f.

Outputtet viser, at tomrumsmarkøren ptr gemmer adressen på en floatvariabel f.

Som det voider en tom type, kan ugyldige pekere ikke henvises til andet.

 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

Eksempel 2: Udskrivning af indholdet af ugyldig markør

For at udskrive indholdet af en ugyldig markør bruger vi static_castoperatøren. Den konverterer markøren fra void*typen til den respektive datatype for den adresse, markøren lagrer:

 #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

 Markørens indhold er 2.3

Dette program udskriver værdien af ​​den adresse, voidmarkøren ptr peger på.

Da vi ikke kan afvige en voidmarkør, kan vi ikke bruge *ptr.

Men hvis vi konverterer void*markørtypen til float*typen, kan vi bruge den værdi, voidmarkøren peger på.

I dette eksempel har vi brugt static_castoperatøren til at konvertere markørens datatype fra void*til float*.

C-stil støbning

Vi kan også bruge casting i C-stil til at udskrive værdien.

 // valid cout << *((float*)ptr);

Det static_castforetrækkes imidlertid frem for støbning i C-stil.

Bemærk: ugyldige markører kan ikke bruges til at gemme adresser på variabler med consteller volatilekvalifikatorer.

 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;

Interessante artikler...