Mediumуказатели

Чем void* отличается от указателей на конкретные типы?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

*`void** — обобщённый указатель, хранит адрес любого объекта. Любой T` неявно приводится к `void, обратно — только через static_cast<T*>`. Нельзя разыменовать, нет арифметики.

int x = 42;
void* vp = &x;           // OK: неявно
// *vp;                  // ОШИБКА: не знаем тип
// vp + 1;               // ОШИБКА: нет sizeof(void)
int* ip = static_cast<int*>(vp);  // явный cast обратно
*ip;                     // OK: 42

Используется в C API (malloc, qsort, memcpy). В C++ чаще заменяют шаблонами, std::any, std::variant — типобезопасными альтернативами.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.