Это происходит потому, что когда вы делаете указатель одного типа на другой тип, иногда это делается непреднамеренно (ошибка), поэтому компилятор предупреждает вас об этом.
Итак, чтобы сообщить компилятору, что вы действительно собираетесь это сделать, вы должны выполнить явное приведение, например:
const void * x = 0;
char * const * p = (char * const * )x;
P.S. Во-первых, я написал: « в большинстве случаев делается непреднамеренно», но AndreyT заставил меня пересмотреть это, когда он справедливо сказал, что void * существует специально для этой цели.