C ++ pokazivač na void (s primjerima)

U ovom uputstvu naučit ćemo o praznim pokazivačima i kako ih koristiti uz pomoć primjera.

Prije nego što nastavite s ovim uputstvom, provjerite C ++ pokazivače.

U C ++-u ne možemo dodijeliti adresu varijable jednog tipa podataka pokazivaču drugog tipa podataka. Razmotrite ovaj primjer:

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

Ovdje se dogodila pogreška jer je adresa doublevarijabla tipa. Međutim, pokazivač je inttipa.

U takvim situacijama možemo koristiti pokazivač za void (void pointers) u C ++. Na primjer,

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

Pokazivač void je generički pokazivač koji se koristi kada ne znamo tip podataka varijable na koju pokazivač pokazuje.

Primjer 1: Pokazatelj praznine 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; )

Izlaz

 0xffd117ac 0xffd117ac

Ovdje je pokazivaču ptrdana vrijednost &f.

Izlaz pokazuje da pokazivač praznine ptr pohranjuje adresu floatvarijable f.

Kao voidi prazan tip, pokazivači praznina ne mogu se dereferencirati.

 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

Primjer 2: Ispis sadržaja pokazivača praznine

Za ispis sadržaja praznog pokazivača koristimo static_castoperator. Pretvara pokazivač iz void*tipa u odgovarajući tip podataka adrese koju pokazivač pohranjuje:

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

Izlaz

 Sadržaj pokazivača je 2.3

Ovaj program ispisuje vrijednost adrese na koju pokazuje voidpokazivač ptr.

Budući da ne možemo dereferencirati voidpokazivač, ne možemo ga koristiti *ptr.

Međutim, ako pretvorimo void*tip pokazivača u float*tip, možemo koristiti vrijednost na koju pokazuje voidpokazivač.

U ovom smo primjeru koristili static_castoperator za pretvorbu vrste podataka pokazivača iz void*u float*.

Lijevanje u stilu C

Za ispis vrijednosti možemo koristiti i lijevanje u stilu C.

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

Međutim, static_castpreferira se lijevanje u stilu C.

Napomena: void pokazivači ne mogu se koristiti za pohranu adresa varijabli s constili volatilekvalifikatora.

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

Zanimljivi članci...