Тип "указатель на неопределенный тип" (указатель на void) — обобщенный указательный тип. Значение указателя любого типа может быть преобразовано и присвоено указателю на тип void и наоборот без изменения его значения. К такому указателю нельзя применять операцию косвенного доступа. Для применения этой операции указатель на void надо привести к определеннму типу.
Пример 1
int main()
{
  int a_function(void *);
  char name[50] = "William";
  int num = 95;

  a_function(name);
  /* передан указатель на char */
  a_function(&num);
  /* передан указатель на int */
}

int a_function(void *vptr)
{
  ...
}
В общем случае, отличном от рассмотренного примера, результат преобразования значений и присваивания указателей различных типов непредсказуем.