Kinda new myself, but this is what I can gather.
void (*prev_handler) (int); is what you have.
void (int) *prev_handler; does not work, stating that a type is not allowed (where int is).
void *prev_handler; is a valid statement, and in fact, it works fine.
What (int) is doing after is explicitly casting as int (I think). The parentheses need to include both the * symblol and the word prev_handler, or else you get an error saying that prev_handler must be a modifiable value.
void is a special type for pointers, which I found here:
http://www.learncpp.com/cpp-tutorial/613-void-pointers/
The reason why we have it in this particular format is SIMPLY because that is the format of signal (SIGINT, my_handler);
If you hover your cursor over where it says "signal" in the code on the function call, then you will see its own format, which is basically a void pointer to a thing cast as an int. Hope I was helpful.