You were pretty close!
Code:
#include <stdio.h>

void *foo ( void *msg ) {
    printf( "%s\n", msg );
    return msg;
}

typedef void *(*fnptr)(void*);

int main ( ) {
    void * (*f1)(void*) = foo;
    fnptr   f2 = foo;
    f1( "hello" );
    f2( "world" );
    return 0;
}
I would recommend the typedef approach if you're going to be using the same function pointer type a lot. Your code will become very verbose otherwise.

Also read this - http://www.newty.de/fpt/index.html