Search code examples
c++cfunction-pointersfunction-declaration

Function pointer parameter without asterisk


I have seen this definition of a function that receives a function pointer as parameter:

double fin_diff(double f(double), double x, double h  = 0.01) {
  return (f(x+h)-f(x)) / h;
}

I am used to see this definition with an asterisk, i.e.:

double fin_diff(double (*f)(double), double x, double h  = 0.01);

Do you know why the first definition is also valid?


Solution

  • Standard says that these two functions are equivalent as function arguments are adjusted to be a pointer to function arguments:

    16.1 Overloadable declarations [over.load]
    (3.3) Parameter declarations that differ only in that one is a function type and the other is a pointer to the same function type are equivalent. That is, the function type is adjusted to become a pointer to function type (11.3.5).

    same in C:

    6.7.5.3 Function declarators (including prototypes)
    8 A declaration of a parameter as ‘‘function returning type’’ shall be adjusted to ‘‘pointer to function returning type’’, as in 6.3.2.1.