2012-04-05 56 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 2012-04-05 08:55:43

+0

的答案是:'0'! – leppie 2012-04-05 09:14:30

回答

2

proc經由函數指針間接調用fun。該fun接收的參數是再次66和平等的運營商計算結果爲int與價值1,因爲他們是平等的。如果不相等,則==運營商將產生0

+0

感謝您的幫助。 – 2012-04-05 09:35:37

1

在主第一行

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

是主叫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。這將導致函數fun被調用,返回a和b的值是否爲真。既然你已經通過6,6作爲參數,結果將是真實的,這就是爲什麼你得到1作爲答案。

0
int fun(int,int); 

函數採用2個INT參數並返回一個int

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

PF是存儲這需要兩個整數作爲其AGRS一個函數的地址的地址的函數指針並返回一個int

int proc(pf,int,int); 

PROC是一個函數,它接受3個ARGS第一個是一個函數指針的功能類似於上面和兩個整數ARGS。

proc(fun,6,6); 

上述語句調用樂趣有兩個參數6,6,如果它們相等返回true這是今天的結果如何1

相關問題