При работе с указателями не следует забывать о типах значений, на которые они указывают.
char c[10];
char* pc = c;
int* pi = pc;
Компилятор языка C даст предупреждение, а компилятор C++ эту операцию считает не безопасной, поэтому выдает ошибку: указатели указывают на разные типы данных. Устранить неоднозначность может только программист, выполнив приведение типов:
int* pi = (int*)pc;
для компилятора с++ чаще встречается другой форма записи с аналогичным действием:
int* pi = reinterpret_cast<int*>(pc);
Выполняя явное приведение типов, программист будет сам отвечать за дальнейшую корректность работы приведенных указателей.