У овом упутству ћемо научити о празним показивачима и како их користити помоћу примера.
Пре него што наставите са овим упутством, обавезно проверите Ц ++ показиваче.
У језику Ц ++ не можемо доделити адресу променљиве једног типа података показивачу другог типа података. Размотрите овај пример:
// 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;
Овде је дошло до грешке јер је адреса double
променљива типа. Међутим, показивач је int
типа.
У таквим ситуацијама можемо користити показивач за воид (воид поинтерс) у Ц ++. На пример,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
Празнина показивач је генерички показивач који се користи када не знамо тип података променљиве које су показивача указује на.
Пример 1: Показивач празнине Ц ++
#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; )
Оутпут
0кффд117ац 0кффд117ац
Овде је показивачу ptr
дата вредност &f
.
Излаз показује да показивач празнине птр чува адресу float
променљиве ф.
Као void
и празан тип, показивачи празнина не могу се дереференцирати.
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: Штампање садржаја показивача празнине
За испис садржаја празног показивача користимо static_cast
оператор. Претвара показивач из void*
типа у одговарајући тип података адресе коју показивач чува:
#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; )
Оутпут
Садржај показивача је 2.3
Овај програм исписује вредност адресе на коју указује void
показивач птр.
С обзиром да не можемо дереференцирати void
показивач, не можемо га користити *ptr
.
Међутим, ако void*
тип показивача претворимо у float*
тип, можемо користити вредност на коју указује void
показивач.
У овом примеру смо користили static_cast
оператор за претварање типа података показивача из void*
у float*
.
Ливење у стилу Ц.
Такође можемо користити ливење у стилу Ц да одштампамо вредност.
// valid cout << *((float*)ptr);
Међутим, static_cast
преферира се ливење у стилу Ц.
Напомена: воид показивачи се не могу користити за чување адреса променљивих са const
или volatile
квалификатора.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;