0

この問題は本で見つけました。

問題:

次のプログラムの出力は何ですか?

#include <stdio.h>
int fun(int,int);
typedef int(*pf) (int,int);
int proc(pf,int,int);

int main()
{
    printf("%d\n",proc(fun,6,6));
    return 0;
}

int fun(int a,int b){
    return (a==b);
}

int proc(pf p,int a,int b){
    return ((*p)(a,b));
}

このコードを実行すると、1 が出力されます。

私はそれを理解しようとしましたが、役に立ちません。このプログラムでは何が行われており、なぜ 1 が出力されるのでしょうか?

前もって感謝します。

4

3 に答える 3

2

procfun関数ポインターを介して間接的に呼び出しています。受け取る引数funは再び66であり、等値演算子intは値で に評価されます1。これらは等しいためです。それらが等しくない場合、==演算子は yieldになり0ます。

于 2012-04-05T08:56:19.883 に答える
1

主に1行目

printf("%d\n",proc(fun,6,6));

関数ポインターと2つの整数値を引数に取るprocを呼び出しています。関数ポインタ pf は次のように定義されています。typedef int(*pf) (int,int); この行printf("%d\n",proc(fun,6,6));は、次のように定義された関数を呼び出します。

int proc(pf p,int a,int b){
return ((*p)(a,b));
}

この関数では、pf は関数 fun へのポインタを保持しています。これにより、a と b の値が真かどうかを返す関数 fun が呼び出されます。引数として 6,6 を渡したので、結果は true になり、それが Answer として 1 を取得する理由です。

于 2012-04-05T08:59:47.330 に答える
0
int fun(int,int); 

関数は 2 つの int 引数を取り、int を返します

typedef int(*pf) (int,int); 

pf は、その agrs として 2 つの int を受け取り、int を返す関数のアドレスのアドレスを格納する関数ポインターです。

int proc(pf,int,int); 

proc は 3 つの引数を取る関数で、最初は上記のような関数への関数ポインタと 2 つの整数引数です。

proc(fun,6,6);

上記のステートメントは、2 つの引数 6 と 6 を指定して fun を呼び出し、それらが等しい場合は true を返します。つまり、結果が 1 になります。

于 2012-04-05T09:07:57.153 に答える