Há alguma diferença entre essas duas definições de função de ordem superior?

Existem diferenças entre as quatro afirmações no main? Eu sinto que apenas apply2 (& func) faz sentido. No entanto, todos os 4 retornam o mesmo valor.

int func(void) 
{
    return 1;
}

int apply1( int f1(void) )
{
    return f1();
}

int apply2( int (*f1) (void) ) 
{
    return f1();
}

int main() 
{
    apply1(func); 
    apply1(&func);
    apply2(func);
    apply2(&func);

    return 0;
}

questionAnswers(1)

yourAnswerToTheQuestion