2012-04-05 22 views
0

本でこの問題が見つかりました。誰でもCプログラムの出力を説明できますか?

問題:

次のプログラムの出力はどのようなものですか?

#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を出力しますか?

ありがとうございます。

+8

である。これは、私には宿題どのように見えるか – Petesh

+0

の答えであるである: '0'!。ヘルプのおかげで – leppie

答えて

2

procは、間接的に関数ポインタを介してfunを呼び出しています。 funが受け取る引数は、やはり66であり、等価演算子は、等しいので、1の値を持つintと評価されます。両者が等しくない場合、==演算子は0になります。メイン最初の行で

+0

ありがとうございます。 –

1

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

引数を関数ポインタと2つの整数値を取っているPROCを呼び出しています。 PFは楽しみを関数へのポインタを保持しているこの機能では今

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

:関数ポインタPFがtypedef int(*pf) (int,int); として定義されている。このラインprintf("%d\n",proc(fun,6,6));は、次のように定義関数を呼び出します。これは、関数funが呼び出され、aとbの値が真であるかどうかにかかわらず返されます。あなたが引数として6,6を渡したので、結果は真実であり、それが答えとして1になっている理由です。

0
int fun(int,int); 

機能は、INT

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

PFはそのagrsとして2つのintを受け取り、INT

を返す関数のアドレスのアドレスを格納する関数ポインタである2つのint型の引数を取り、返し
int proc(pf,int,int); 

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

proc(fun,6,6); 

彼らが等しい場合は2つの引数6,6を楽しんで呼び出し、trueを返す結果は1

関連する問題