În acest tutorial, vom afla despre indicatoarele de gol și cum să le folosim cu ajutorul exemplelor.
Înainte de a continua cu acest tutorial, asigurați-vă că verificați indicatorii C ++.
În C ++, nu putem atribui adresa unei variabile de un tip de date unui pointer de alt tip de date. Luați în considerare acest exemplu:
// 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;
Aici, eroarea a apărut deoarece adresa este o doublevariabilă de tip. Cu toate acestea, indicatorul este de inttip.
În astfel de situații, putem folosi pointerul pentru a anula (pointeri void) în C ++. De exemplu,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
Void pointer este un indicator generic care este utilizat atunci când nu cunoaștem tipul de date al variabilei care indicatorul să.
Exemplul 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; )
Ieșire
0xffd117ac 0xffd117ac
Aici, indicatorului i ptrse dă valoarea &f.
Ieșirea arată că indicatorul gol ptr stochează adresa unei floatvariabile f.
Așa cum voideste un tip gol, indicatorii de gol nu pot fi derecați.
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
Exemplul 2: Imprimarea conținutului indicatorului Void
Pentru a imprima conținutul unui pointer gol, folosim static_castoperatorul. Convertește pointerul de la void*tip la tipul de date respectiv al adresei pe care pointerul o stochează:
#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; )
Ieșire
Conținutul indicatorului este 2.3
Acest program imprimă valoarea adresei indicată de voidindicatorul ptr.
Deoarece nu putem dereca un voidpointer, nu putem folosi *ptr.
Cu toate acestea, dacă convertim void*tipul pointerului în float*tip, putem folosi valoarea indicată de voidpointer.
În acest exemplu, am folosit static_castoperatorul pentru a converti tipul de date al indicatorului de void*la float*.
Turnare în stil C
De asemenea, putem folosi turnarea în stil C pentru a imprima valoarea.
// valid cout << *((float*)ptr);
Cu toate acestea, static_casteste preferat turnării în stil C.
Notă: pointerii void nu pot fi folosiți pentru a stoca adresele variabilelor cu constsau volatilecalificative.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;








