C ++ ukazovateľ na neplatné (s príkladmi)

V tejto príručke sa dozvieme o neplatných ukazovateľoch a o tom, ako ich používať, pomocou príkladov.

Predtým, ako budete pokračovať v tomto výučbe, nezabudnite skontrolovať ukazovatele C ++.

V C ++ nemôžeme priradiť adresu premennej jedného údajového typu ukazovateľu iného údajového typu. Zvážte tento príklad:

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

Tu sa vyskytla chyba, pretože adresa je doubletypová premenná. Ukazovateľ je však inttypu.

V takýchto situáciách môžeme použiť ukazovateľ na neplatnosť (neplatné ukazovatele) v C ++. Napríklad,

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

Ukazovateľ neplatnosti je všeobecný ukazovateľ, ktorý sa používa, keď nepoznáme dátový typ premennej, na ktorú ukazovateľ ukazuje.

Príklad 1: C ++ Void Pointer

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

Výkon

 0xffd117ac 0xffd117ac

Tu má ukazovateľ ptrhodnotu &f.

Výstup ukazuje, že ukazovateľ void ptr ukladá adresu floatpremennej f.

Ako voidje prázdny typ void ukazovatele nemožno dereferencovat.

 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

Príklad 2: Tlač obsahu neplatného ukazovateľa

Na tlač obsahu ukazovateľa neplatnosti používame static_castoperátor. Konvertuje ukazovateľ z void*typu na príslušný údajový typ adresy, ktorú ukazovateľ ukladá:

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

Výkon

 Obsah ukazovateľa je 2.3

Tento program vytlačí hodnotu adresy, na ktorú voidukazuje ukazovateľ ptr.

Pretože nemôžeme odradiť voidukazovateľ, nemôžeme ho použiť *ptr.

Ak však prevedieme void*typ ukazovateľa na float*typ, môžeme použiť hodnotu, na ktorú voidukazuje ukazovateľ.

V tomto príklade sme použili static_castoperátor na prevod dátového typu ukazovateľa z void*na float*.

Casting v štýle C.

Na vytlačenie hodnoty môžeme použiť aj casting v štýle C.

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

Avšak static_castje výhodné odlievanie C-štýlu.

Poznámka: ukazovatele void nemožno použiť na ukladanie adries premenných s constalebo volatilekvalifikátormi.

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

Zaujímavé články...