C ++ ukazatel na neplatnost (s příklady)

V tomto výukovém programu se pomocí příkladů dozvíme o ukazatelích neplatnosti a o tom, jak je používat.

Než budete pokračovat v tomto kurzu, nezapomeňte zkontrolovat ukazatele C ++.

V C ++ nemůžeme přiřadit adresu proměnné jednoho datového typu ukazateli na jiný datový typ. Zvažte tento pří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;

Zde došlo k chybě, protože adresa je doubletypová proměnná. Ukazatel je však inttypu.

V takových situacích můžeme použít ukazatel na void (void pointers) v C ++. Například,

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

Ukazatel void je obecný ukazatel, který se používá, když neznáme datový typ proměnné, na kterou ukazatel ukazuje.

Pří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ýstup

 0xffd117ac 0xffd117ac

Zde je ukazatelu ptrdána hodnota &f.

Výstup ukazuje, že ukazatel void ptr ukládá adresu floatproměnné f.

Stejně voidjako prázdný typ nelze dereferencovat void ukazatele.

 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

Příklad 2: Tisk obsahu prázdného ukazatele

K tisku obsahu ukazatele neplatnosti použijeme static_castoperátor. Převádí ukazatel z void*typu na příslušný datový typ adresy, kterou ukazatel ukládá:

 #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ýstup

 Obsah ukazatele je 2.3

Tento program vytiskne hodnotu adresy, na kterou ukazuje voidukazatel ptr.

Protože nemůžeme dereference voidukazatele, nemůžeme použít *ptr.

Pokud však převedeme void*typ ukazatele na float*typ, můžeme použít hodnotu, na kterou ukazuje voidukazatel.

V tomto příkladu jsme použili static_castoperátor k převodu datového typu ukazatele z void*na float*.

Casting ve stylu C.

Můžeme také použít casting ve stylu C k tisku hodnoty.

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

Je však static_castupřednostňováno před castingem ve stylu C.

Poznámka: void pointers nelze použít k ukládání adres proměnných s constnebo volatilekvalifikátory.

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

Zajímavé články...