C ++ вказівник на void (з прикладами)

У цьому посібнику ми дізнаємося про порожні вказівники та як ними користуватися за допомогою прикладів.

Перш ніж продовжити цей підручник, обов’язково перевірте вказівники на C ++.

У C ++ ми не можемо призначити адресу змінної одного типу даних покажчику іншого типу даних. Розглянемо цей приклад:

 // 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 (void pointers) у C ++. Наприклад,

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

Недійсним покажчик являє собою загальний покажчик , який використовується , коли ми не знаємо , тип даних змінної , яка вказує покажчик на.

Приклад 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; )

Вихідні дані

 0xffd117ac 0xffd117ac

Тут покажчику ptrприсвоюється значення &f.

Результат показує, що покажчик порожнечі ptr зберігає адресу floatзмінної f.

Як 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: Друк вмісту покажчика Void

Для друку вмісту покажчика void ми використовуємо 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вказує вказівник ptr.

Оскільки ми не можемо розмежувати 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;

Цікаві статті...