C ++ mutató érvénytelenítése (példákkal)

Ebben az oktatóanyagban megismerhetjük az érvénytelen mutatókat és azok használatát példák segítségével.

Mielőtt folytatná ezt az oktatóanyagot, ellenőrizze a C ++ mutatókat.

A C ++ nyelven nem rendelhetünk egy adattípusú változó címét egy másik adattípus mutatójához. Tekintsük ezt a példát:

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

Itt a hiba azért következett be, mert a cím egy doubletípusú változó. A mutató azonban inttípusú.

Ilyen helyzetekben a mutatót érvényteleníthetjük (érvénytelen mutatókat) a C ++ nyelven. Például,

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

A void pointer egy általános mutató, amelyet akkor használnak, amikor nem ismerjük a változó adattípusát, amelyre a mutató mutat.

1. példa: 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; )

Kimenet

 0xffd117ac 0xffd117ac

Itt a mutató ptrmegadja a &f.

A kimenet azt mutatja, hogy a ptr érvénytelen mutató eltárolja az floatf változó címét .

Csakúgy, voidmint egy üres típus, az érvénytelen mutatókra sem lehet hivatkozni.

 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

2. példa: Az Üres mutató tartalmának kinyomtatása

Az érvénytelen mutató tartalmának kinyomtatásához az static_castoperátort használjuk . Átalakítja a mutatót a void*típus által tárolt cím megfelelő adattípusára:

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

Kimenet

 A mutató tartalma 2.3

Ez a program kinyomtatja a cím értékét, voidamelyre a ptr mutató mutat.

Mivel nem vonhatunk le voidmutatót, nem használhatjuk *ptr.

Ha azonban a void*mutatótípust konvertáljuk float*típusra, használhatjuk a voidmutató által mutatott értéket .

Ebben a példában az általunk használt a static_castkezelő átalakítani az adatok típusát a mutatót void*, hogy float*.

C stílusú casting

C-stílusú castingot is használhatunk az érték kinyomtatásához.

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

static_castElőnyben részesíti azonban a C stílusú castingot.

Megjegyzés: az érvénytelen mutatók nem használhatók változók constvagy volatileminősítők címének tárolására .

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

érdekes cikkek...