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

时间:2012-10-27 14:03:29

标签: c function pointers function-pointers

#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);
}  

这里所有函数调用都给出相同的输出。即使p, fun, *fun也提供相同的地址。我们怎么解释这个?

How can fun and *fun be same?

1 个答案:

答案 0 :(得分:7)

因为C说:

  

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

fun*fun具有相同的值。