All three calls are valid.
According to the C Standard (6.3.2.1 Lvalues, arrays, and function designators)
4 A function designator is an expression that has function type.
  Except when it is the operand of the sizeof operator65) or the unary &
  operator, a function designator with type ‘‘function returning type’’
  is converted to an expression that has type ‘‘pointer to function
  returning type’’
Moreover you can even write
first( ******second );
That is a function designator used in expressions is implicitly converted to pointer to the function itself except of in fact one case when it is used as an operand of the & operator where the address of the function is taking explicitly.
Here is a demonstrative program
#include <stdio.h>
void g( void ( *f )( void ))
{
    f();
}
void f( void )
{
    puts( "Hello!" );
}
int main( void ) 
{
    g( **********f );
    return 0;
}
Its output is
Hello!
Take into account that the function first also could be declared like
char first (int (char, float)) ;
A function parameter having a function type is implicitly adjusted to pointer to function.