With function pointers, the notation can get intimidating. Let’s look at an example that illustrates some of the challenges of function pointers and ways of dealing with them. To begin, here are prototypes for some functions that share the same signature and return type:
const double * f1(const double ar, int n);const double * f2(const double , int);const double * f3(const double *, int);
The signatures might look different, but they are the same. First, recall that in a function prototype parameter list
const double ar and
const double * ar have exactly the same meaning. Second, recall that in a prototype you can omit identifiers. Therefore,
const double ar can be reduced to
const double  ...