黑马程序员技术交流社区

标题: 一道课后习题,求解 [打印本页]

作者: jy02305403    时间: 2014-11-9 19:45
标题: 一道课后习题,求解
#include <stdio.h>

typedef int (*Yunsuan)(int, int);

int sum(int a, int b)
{
    return a + b;
}

int minus(int a, int b)
{
    return a - b;
}

int count(int a, int b, Yunsuan p)
{
    return p(a, b);
}

int main()
{
    int a = sum(minus(10, 5), count(10, 5, sum));
    printf("%d\n", a);
    return 0;
}

这是课后的一道习题,不太理解,答案是20,大神们,求个运算过程,例如每一步是怎么算的!谢谢!
作者: dream静    时间: 2014-11-9 20:01
Minus(10,5) == 10 -5 ==5;
count(10,5,sum) 估计你是这个没看懂;你这个代码的第一步是定义了一个指向函数的指针;
然后count(10,5,sum)中得sum就代表调用count(in a,inb,Yunsuan p)时其中的p指针指向sum;
所以相当于return sum(10,5) == 10+5 ==15;
所以结果是20;
作者: lanwen963    时间: 2014-11-9 20:02
  1. #include <stdio.h>

  2. // 定义一个指向函数的指针,指针变量*Yunsuan将来肯定指向函数
  3. typedef int (*Yunsuan)(int, int);

  4. int sum(int a, int b)// 求和函数
  5. {
  6.     return a + b;
  7. }

  8. int minus(int a, int b)// 求差函数
  9. {
  10.     return a - b;
  11. }

  12. // 其中的Yunsuan P就是需要传入一个函数
  13. int count(int a, int b, Yunsuan p){
  14.     return p(a, b);
  15. }

  16. int main()
  17. {
  18.     /*count(10, 5, sum)计算时,相当于P = sum,返回值就是sum(a,b);
  19.      再将minus(10,5)和sum(10,5)的返回值作为实参传给sum函数得出结果20
  20.      */
  21.     int a = sum(minus(10, 5), count(10, 5, sum));
  22.     printf("%d\n", a);
  23.     return 0;
  24. }
复制代码
希望能够帮到你,不理解就去看看指向函数的指针就会了

作者: jy02305403    时间: 2014-11-9 20:44
dream静 发表于 2014-11-9 20:01
Minus(10,5) == 10 -5 ==5;
count(10,5,sum) 估计你是这个没看懂;你这个代码的第一步是定义了一个指向函数 ...

谢了懂了!
作者: jy02305403    时间: 2014-11-9 20:56
lanwen963 发表于 2014-11-9 20:02
希望能够帮到你,不理解就去看看指向函数的指针就会了

找到原视频了,一时没注意,你写的也非常详尽,感谢万分!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2