#include struct test1 { int i; }; typedef struct test1 *Test1; struct test2 { char *s; }; typedef struct test2 *Test2; void func1(int type, Test1 p) { (void)p; puts("func1"); } void func2(int type, Test2 p) { (void)p; puts("func2"); } int main(int argc, char* argv[]) { Test1 t1; Test2 t2; void (*fp)(); /*void (*fp)(int, void *); */ fp = func1; fp(1, t1); fp = func2; fp(2, t2); return (0); }