C11 has type-generic expressions to help you solve this problem. You could do something like this example:
#define myFunction(X) _Generic((X), \
int *: myFunctionInt, \
float *: myFunctionFloat, \
default: myFunctionInt \
)(X)
void myFunctionInt(int *x);
void myFunctionFloat(float *x);
And then call it the way you are:
int n = 10;
myFunction(&n);
or:
float n = 10.0f;
myFunction(&n);
You will need to implement the separate target functions, but you could just do the pointer magic there and pass off to a common handler, for example.