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 に答える