任何人都可以解释一下C程序的输出吗?

时间:2012-04-05 08:52:34

标签: 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?

提前致谢。

3 个答案:

答案 0 :(得分:2)

proc通过函数指针间接调用funfun收到的参数再次为66,而等于运算符的值为int的{​​{1}},因为它们相等。如果它们不相等,1运算符将产生==

答案 1 :(得分: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,它返回a和b的值是否为真。由于你已经传递了6,6作为参数,结果将是真的,这就是为什么你得到1作为答案。

答案 2 :(得分: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调用fun,如果它们相等则返回true,结果是1