4
#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?
4

1 回答 1

7

因为 C 说:

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

fun并且*fun具有相同的值,因为它们是等价的。

于 2012-10-27T14:05:20.913 回答