有哪位高手能和小弟我解释下这个复杂的函数是什么意思吗

有谁能和我解释下这个复杂的函数是什么意思吗
void (*fun(void (*p)(void *)))(void *)

我不明白为什么fun后面还可以有参数
------解决思路----------------------
fun的参数类型是void (*)(void *), 返回值类型是void (*)(void *) 给个简单例子
void p1(void *) {}
void (*fun(void (*p)(void *)))(void *){
    return p;
}
auto f =fun(&p1);