[英]Can anyone please explain the output of C program?
我在一本书中发现了这个问题。
问题:
以下程序的output是什么?
#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。
我试着理解它,但没有,它没有用。 这个程序是怎么回事,为什么 output 1?
提前致谢。
proc
通过 function 指针间接调用fun
。 fun
接收到的 arguments 又是6
和6
,相等运算符的计算结果为值为1
的int
,因为它们相等。 如果它们不相等,则==
运算符将产生0
。
在 main 第一行
printf("%d\n",proc(fun,6,6));
正在调用 proc,它采用参数 function 指针和两个 integer 值。 Function 指针 pf 定义为typedef int(*pf) (int,int);
这一行printf("%d\n",proc(fun,6,6));
将调用 function 定义为:
int proc(pf p,int a,int b){
return ((*p)(a,b));
}
现在在这个 function pf 中持有指向 function fun 的指针。 这将导致调用 function 函数,它返回 a 和 b 的值是否为真。 由于您已经通过 6,6 作为 arguments 结果将为真,这就是为什么您得到 1 作为答案的原因。
int fun(int,int);
function 接受 2 个 int arguments 并返回一个 int
typedef int(*pf) (int,int);
pf 是一个 function 指针,它存储一个 function 的地址的地址,它以两个 int 作为它的 ags 并返回一个 int
int proc(pf,int,int);
proc 是一个 function,它接受 3 个参数,首先是一个 function 指针,指向上面的 function 和两个 integer 参数。
proc(fun,6,6);
上面的语句用两个参数 6 和 6 调用 fun,如果它们相等则返回 true,结果是 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.