¿Hay alguna diferencia entre estas dos definiciones de funciones de orden superior?

¿Hay alguna diferencia entre las 4 afirmaciones en general? Siento que solo aplicar2 (& func) tiene sentido. Sin embargo, los 4 devuelven el mismo 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;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta