#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?
答案 0 :(得分:7)
因为C说:
(C99,6.5.3.2p4)“一元*运算符表示间接。如果操作数指向一个函数,结果是函数指示符;”
fun
和*fun
具有相同的值。