Ma devi risolvere un problema "in particolare" oppure e' un discorso del tutto generico?

Nel secondo caso, il linguaggio C non ti consente di fare quello che vuoi senza che tu indichi il tipo di argomento in qualche modo ... (ovviamente in C++ puoi usare l'overload ...)

Potresti scrivere

void funz(int tipo, void *arg)

e decidere che tipo = 1 indica che il dato passato per puntatore e' un intero, 2 se e' un char ... e cosi' via ...

Pero' ti ripeto, parliamo "in concreto" di cosa vuoi fare .... probabilmente si puo' scegliere una strada apposita ...