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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙林 高级黑马   /  2014-10-12 00:28  /  1225 人查看  /  7 人回复  /   0 人收藏 转载请遵从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;
}
谁能帮我讲解一下这道题,谢谢。。。

评分

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

查看全部评分

7 个回复

倒序浏览
魔法少年十三 来自手机 中级黑马 2014-10-12 04:42:59
沙发
题目是啥
回复 使用道具 举报
看不懂:L
回复 使用道具 举报
minus(10, 5)   -->  10  -  5 = 5;
count(10, 5, sum)  --> return p(a, b); -->  sum(10,5)  ->10 + 5 = 15
int a = sum(minus(10, 5), count(10, 5, sum));   -> sum(5,15)  ->20
回复 使用道具 举报
给个题目啊
回复 使用道具 举报
定义了指向函数的指针,YunSuan,而方法count接收两个整数和一个指针。在main函数里面调用了这个方法,传入两个数,然后指针的位置传入的是sum方法。其余的就不用解释了吧?
回复 使用道具 举报
lyan 中级黑马 2014-10-12 15:36:43
7#
这个题只要理解Yunsuan是指向int xx(int,int)的函数指针,就ok了
回复 使用道具 举报
Lxy 中级黑马 2014-10-13 23:52:03
8#
本帖最后由 Lxy 于 2014-10-14 00:02 编辑

指向函数的指针的实例:
定义指向函数的指针
    double (*p)(double,char *,int)
    p = haha;
    或者
    double (*p)(double,char * ,int) = haha;
如何间接调用函数
1> (*p)(10.7,"jack",10)
2> p(10.7,"jack",10) //这种调用方法就和调用指向数组的指针一样,实例如下:调用数组元素的三种方式:
printf("%d\n",*(p+2));
printf("%d\n",ages[2]);
printf("%d\n",p[2]);//效果同上句,可以把指针变量当做数组名用,因为都代表的是数组首地址
所以下面这个函数的第3个形参是指向sum函数的指针变量p,调用函数就要把函数的地址给指向函数的变量,函数名代表函数的首地址,所以用形参名位sum,并赋值给p,并通过上面的两种间接调用函数的方法,就可以调用sum函数了
int count(int a, int b, Yunsuan p)
{
    return p(a, b);//这种形式p(a, b)你也许有点困惑,那么改成(*p)(a, b),应该就清晰些了,这两种方式效果是一样的,原理如上面的红色字处;
}

个人观点!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马