通常、ポインタ型の変数は、データ型を指定しますが、
データ型を指定せずにポインタ型の変数を宣言する事ができます。
これをvoid型ポインタと呼びます。
void* vp; // void型ポインタの宣言
char c[4] = "123";
int i = 500;
vp = &c; // void型ポインタにchar型ポインタ値を代入
// void型ポインタを使ってchar型変数cの中身を表示
printf("c = %s\n", (char*)vp);
vp = &i; // void型ポインタにint型ポインタ値を代入
// void型ポインタを使ってint型変数iの中身を表示
printf("i = %d\n", *(int*)vp);
c = 123
i = 500
このようにvoid型ポインタ変数には、
どんなデータ型のポインタ値でも入れられます。
void型ポインタ変数を使う時は、
どのデータ型で使うかをキャストで示してから使用します。
その他のvoid機能については、
こちらのページで説明しています。