| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 407 人关注过本帖
标题:请问这个函数怎么调用的呢
只看楼主 加入收藏
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
结帖率:91.67%
收藏
已结贴  问题点数:2 回复次数:6 
请问这个函数怎么调用的呢
add是add函数的首地址的话,那么add就是process函数实参,而process函数的形参为一个函数指针f,所以有函数调用过程,也就是将add函数的入口地址送给函数指针f,由f指向这个add函数,晕了,不会用怎么办
程序代码:
#include <stdio.h>
double process(double(*f)(double,double))
{
    int i;
    double result=1;
    for(i=2;i<=10;i++)
        result=f(result,i);
    return result;
}
double add(double x,double y)
{
    return x+y;
}
void main(int argc,char*argv[])
{  
    printf("%.0f\n",process(add));
}
搜索更多相关主题的帖子: process result 
2014-04-24 22:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
不会用怎么办
------ 你不是用了嘛,不明白你想干什么
2014-04-25 08:26
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:2 
你说的对啊~
double process(double(*f)(double,double))
{
    int i;
    double result=1;
    for(i=2;i<=10;i++)
        result=f(result,i);
    return result;
}
通过主函数调用process()函数吧add赋值给f,也就是说让process()知道这么一个
类型的函数指针(入口),然后调用的时候就能使用了呗。result=f(result,i);
这个文件里面add的定义在process定义下面,也不用前置声明add函数,在process函数就直接可以使用了。
参数传递情况:

main函数里面:
printf("%.0f\n",process(add));
这里,add是实际参数,是add函数的入口(函数地址),这里直接使用的add地址,没有重新开辟命名空间

然后,调用了process函数:
double process(double(*f)(double,double))
这是process的头部(原谅我不知道咋说了),这时候通过main函数里面的调用,把add的地址,也就是一个指针的值复制赋值给了f,process函数被调用运行的时候开辟了f的命名空间,分配了存放地址(指针)的内存单元,值就是add的函数入口。

然后在process函数里面调用f:
result=f(result,i);
通过类似*f的访问
(再一次原谅我,具体访问方式是啥样我不清楚,只是让你能好理解一下,就跟 int a; int *add=&a; int *f=add; 差不多,这时候 使用 *add 和 *f都是访问a)
,把实际参数result和i传递给add函数的double add(double x,double y)形式参数,
调用add函数,为 x y分配内存单元,值分别是x=result,y=i然后运行函数体。

我的理解是这样的

未知令人期待!
2014-04-26 03:20
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
我也有点晕,指针了解不多

我不是砖家,要努力成为砖家。
2014-04-26 09:12
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
回复 2 楼 rjsp
这是我在书上看到的代码了。就是不太懂函数指针的用法
2014-04-26 15:18
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
回复 3 楼 神机军师
貌似明白了一点,就是函数调用的过程,不明白为什么要整出一个函数指针出来干什么
2014-04-26 15:19
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
回复 6 楼 longxingxiu
方便调用函数啊,例如定义了:
double Add(double x,double y)
double Sub(double x,double y)
double Mul(double x,double y)
double Div(double x,double y)
四个函数,在这里直接用:
printf("%.0f\n",process(Add));
printf("%.0f\n",process(Sub));
printf("%.0f\n",process(Mul));
printf("%.0f\n",process(Div));
就能很快调用并使用了。

未知令人期待!
2014-04-27 13:59
快速回复:请问这个函数怎么调用的呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023235 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved