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接收的参数又是6and 6,并且相等运算符的计算结果是int带有值的 an,1因为它们是相等的。如果它们不相等,则==运算符将让0

于 2012-04-05T08:56:19.883 回答
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 作为答案的原因。

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

函数接受 2 个 int 参数并返回一个 int

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

pf 是一个函数指针,用于存储函数的地址地址,该函数以两个 int 作为其 agrs 并返回一个 int

int proc(pf,int,int); 

proc 是一个函数,它首先需要 3 个 args,它是一个指向上述函数的函数指针和两个整数 args。

proc(fun,6,6);

上面的语句用两个参数 6 和 6 调用 fun,如果它们相等则返回 true,这就是结果为 1

于 2012-04-05T09:07:57.153 回答