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 подскажет развёрнутый ответ в реальном времени.