【问题标题】:Can anyone please explain the output of C program?谁能解释一下C程序的输出?
【发布时间】:2012-04-05 08:52:34
【问题描述】:

我在一本书中发现了这个问题。

问题:

以下程序的输出是什么?

#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?

提前致谢。

【问题讨论】:

  • 这对我来说像是家庭作业

标签: c


【解决方案1】:

proc 通过函数指针间接调用funfun 接收的参数又是 66,相等运算符的计算结果为 int,其值为 1,因为它们相等。如果它们不相等,== 运算符将产生 0

【讨论】:

    【解决方案2】:

    在main第一行

    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 作为答案的原因。

    【讨论】:

      【解决方案3】:
      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2012-06-21
        • 2017-09-12
        • 2015-09-18
        相关资源
        最近更新 更多