Kazalec C ++ na void (z primeri)

V tej vadnici bomo s pomočjo primerov spoznali prazne kazalce in kako jih uporabiti.

Preden nadaljujete s to vadnico, preverite kazalce C ++.

V C ++ naslovu spremenljivke enega podatkovnega tipa ne moremo dodeliti kazalca drugega podatkovnega tipa. Razmislite o tem primeru:

 // 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 je prišlo do napake, ker je naslov doublespremenljivka tipa. Kazalec pa je inttipa.

V takih situacijah lahko uporabimo kazalec za void (void kazalce) v C ++. Na primer

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

Neveljaven kazalec generično kazalec, ki se uporablja, ko ne vemo, podatkovni tip spremenljivke, ki so kazalec točke na.

Primer 1: Kazalec za praznino C ++

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

Izhod

 0xffd117ac 0xffd117ac

Tu je kazalcu ptrdana vrednost &f.

Izhod kaže, da kazalec void ptr shrani naslov floatspremenljivke f.

Kakor voidje prazen tip, tudi praznih kazalcev ni mogoče razporejati.

 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

Primer 2: Tiskanje vsebine kazalca za praznino

Za tiskanje vsebine praznega kazalca uporabimo static_castoperator. Kazalec pretvori iz void*vrste v ustrezen podatkovni tip naslova, ki ga shranjuje kazalec:

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

Izhod

 Vsebina kazalca je 2.3

Ta program natisne vrednost naslova, na katerega kaže voidkazalec ptr.

Ker ne moremo usmeriti voidkazalca, ne moremo uporabiti *ptr.

Če pa void*tip kazalca pretvorimo v float*tip, lahko uporabimo vrednost, na katero kaže voidkazalec.

V tem primeru smo uporabili static_castoperator za pretvorbo podatkovnega tipa kazalca iz void*v float*.

Ulivanje v slogu C

Za tiskanje vrednosti lahko uporabimo tudi ulivanje v slogu C.

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

Vendar static_castje prednost pred litjem v slogu C.

Opomba: void kazalci ni mogoče uporabiti za shranjevanje naslovov spremenljivk z constali volatilekvalifikantov.

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

Zanimive Članki...