Since you need to know which function you are calling to know which argument list to pass:
switch (whichFunction)
{
case 0: func0(arg list for func0); break;
case 1: func1(different arg list for func1); break;
}
Another option is to declare the argument as a 'void *'. Then you can pass any pointer, to a single value or a whole struc t of values. Each function needs to know what kind of pointer to cast the void * to.
Another is to make all of the functions Variadic: taking a variable number of arguments. That is how printf() can take a variable number of arguments of various types. The called function has to know what types are passed and in what order.