黑马程序员技术交流社区
标题: 谁能给我讲一下这道题,十分感谢 [打印本页]
作者: 孙林 时间: 2014-10-12 00:28
标题: 谁能给我讲一下这道题,十分感谢
#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;
}
谁能帮我讲解一下这道题,谢谢。。。
作者: 魔法少年十三 时间: 2014-10-12 04:42
题目是啥
作者: 莫瑞伟 时间: 2014-10-12 11:42
看不懂:L
作者: 明天过后1 时间: 2014-10-12 12:46
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
作者: 王绍明 时间: 2014-10-12 13:56
给个题目啊
作者: cjfire 时间: 2014-10-12 14:35
定义了指向函数的指针,YunSuan,而方法count接收两个整数和一个指针。在main函数里面调用了这个方法,传入两个数,然后指针的位置传入的是sum方法。其余的就不用解释了吧?
作者: lyan 时间: 2014-10-12 15:36
这个题只要理解Yunsuan是指向int xx(int,int)的函数指针,就ok了
作者: Lxy 时间: 2014-10-13 23:52
本帖最后由 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),应该就清晰些了,这两种方式效果是一样的,原理如上面的红色字处;
}
个人观点!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |