为什么在这个C程序中所有输出都相同?

nee*_*eel 4 c pointers function-pointers function

#include<stdio.h>
int main(){
    extern void fun(int);
    void (*p)(int) = fun;
        fun(2);
    (*fun)(2);
    (*p)(2);
    p(2);
    printf("%x %x %x\n",p,fun,*fun);
}

void fun(int i){
    printf("hi %d\n",i);
}  
Run Code Online (Sandbox Code Playgroud)

这里所有函数调用都给出相同的输出.甚至p, fun, *fun给出相同的地址.我们怎么解释这个?

How can fun and *fun be same?
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 7

因为C说:

(C99,6.5.3.2p4)"一元*运算符表示间接.如果操作数指向一个函数,则结果是函数指示符;"

fun并且*fun具有相同的价值.