C ++ peker for å annullere (med eksempler)

I denne opplæringen vil vi lære om ugyldige pekere og hvordan du bruker dem ved hjelp av eksempler.

Før du fortsetter med denne veiledningen, må du sjekke C ++ pekere.

I C ++ kan vi ikke tilordne adressen til en variabel av en datatype til en peker av en annen datatype. Tenk på dette eksemplet:

 // 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 oppstod feilen fordi adressen er en doubletypevariabel. Pekeren er imidlertid av inttypen.

I slike situasjoner kan vi bruke pekeren til å ugyldiggjøre (ugyldige pekere) i C ++. For eksempel,

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

Den ugyldige pekeren er en generisk peker som brukes når vi ikke vet datatypen til variabelen som pekeren peker på.

Eksempel 1: C ++ ugyldig peker

 #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; )

Produksjon

 0xffd117ac 0xffd117ac

Her får pekeren ptrverdien av &f.

Utgangen viser at tomrumspekeren ptr lagrer adressen til en floatvariabel f.

Som voiden tom type, kan ugyldige pekere ikke henvises til.

 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: Skrive ut innholdet i ugyldig peker

For å skrive ut innholdet i en tom peker bruker vi static_castoperatøren. Den konverterer pekeren fra void*typen til den respektive datatypen til adressen pekeren 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; )

Produksjon

 Innholdet i pekeren er 2.3

Dette programmet skriver ut verdien av adressen som voidpekeren ptr peker på.

Siden vi ikke kan referere en voidpeker, kan vi ikke bruke den *ptr.

Men hvis vi konverterer void*pekertypen til float*typen, kan vi bruke verdien voidpekeren peker på.

I dette eksemplet har vi brukt den static_castoperatøren å konvertere datatypen pekeren fra void*til float*.

C-stil casting

Vi kan også bruke casting i C-stil for å skrive ut verdien.

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

static_castForetrekkes imidlertid fremfor C-stil casting.

Merk: ugyldige pekere kan ikke brukes til å lagre adresser til variabler med consteller volatilekvalifikasjoner.

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

Interessante artikler...