C ++ Pointer to nul (Cu exemple)

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

Articole interesante...