Ц ++ показивач на воид (са примерима)

У овом упутству ћемо научити о празним показивачима и како их користити помоћу примера.

Пре него што наставите са овим упутством, обавезно проверите Ц ++ показиваче.

У језику Ц ++ не можемо доделити адресу променљиве једног типа података показивачу другог типа података. Размотрите овај пример:

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

Занимљиви Чланци...