我在一本书中发现了这个问题。
问题:
以下程序的输出是什么?
#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?
提前致谢。
答案 0 :(得分:2)
proc
通过函数指针间接调用fun
。 fun
收到的参数再次为6
和6
,而等于运算符的值为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