C语言中关于函数调用的问题

有定义函数 int fun(int a); int (*p)(int)=fun;则可以正确调用fun函数一组的是

img


希望帮忙解释一下其他选项,分别有什么区别,谢谢

选A
fun是个函数,它同时也是个指针,它的指针值就是它的地址,自己指向自己
所以fun,&fun,*fun都是同一个值
同理,p是指向fun的指针,那么*p是解地址的值,值还是fun的地址
B.&p不可以,那是p的地址不是fun的地址
C,D,凡*p和*fun没有括起来的,那是函数返回值再解地址,必须括起来

这个首先你的理解括号的作用。
括号一般用于函数,表达式,强制转换。(*)或(&)它是什么呢?明显不符合函数的定义,又不符合强制转换的定义。那它就是表达式。你用表达式的方式来理解一下就很容易