double (*)(double) is the signature of a function pointer for a function that takes one double argument and returns double . At all
X (*)(A, B, C) // any number of args
is a pointer to a function that takes args of types (A, B, C) and returns a value of type X , for example.
X my_func(A, B, C) { return X();
will have the signature above.
So, in your case, get_fun is a function that returns a pointer to a function.
source share