Это действительно C, но не C++; это два разных языка, даже если они имеют много общих черт.
В C++ отсутствует неявное преобразование от void*
к типизированному указателю, поэтому вам нужно сделать бросок. Вы должны предпочесть C++ приведения типа, поскольку они ограничивают какие конверсии разрешены и поэтому помогают предотвратить ошибки:
s = static_cast<char*>(p);
еще лучше, вы должны использовать полиморфные методы (такие как абстрактные базовые классы и шаблоны), чтобы избежать необходимости в сначала используйте нетипизированные указатели; но это выходит за рамки этого вопроса.
P не является указателем на символ. Назначая _value_ '' '' p', вы также не назначаете _type_. –
(Кстати, ваши указатели оба неинициализированы, поэтому их значения неопределены.) –
Что произойдет, если вы присвоите int-указателю p, а затем s = p? –