A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jy02305403 中级黑马   /  2014-11-9 19:45  /  1478 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

#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,大神们,求个运算过程,例如每一步是怎么算的!谢谢!

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

4 个回复

倒序浏览
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;
回复 使用道具 举报
  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. }
复制代码
希望能够帮到你,不理解就去看看指向函数的指针就会了
回复 使用道具 举报
dream静 发表于 2014-11-9 20:01
Minus(10,5) == 10 -5 ==5;
count(10,5,sum) 估计你是这个没看懂;你这个代码的第一步是定义了一个指向函数 ...

谢了懂了!
回复 使用道具 举报
lanwen963 发表于 2014-11-9 20:02
希望能够帮到你,不理解就去看看指向函数的指针就会了

找到原视频了,一时没注意,你写的也非常详尽,感谢万分!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马