指针函数求解

w346581442 2012-06-28 02:20:20
void tabulate(double (*f)(double),double first,double last,double incr)
{
double x;
int i,num_intervals;
num_intervals=ciel((last-first)/incr);
for(i=0;i<=num_intervals;i++){
x=first+i*incr;
printf("%10.5f%10.5f\n",x,(*f)(x));//f是怎么调用的,请了
}
}
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
彭家老三 2012-06-28
  • 打赏
  • 举报
回复
void tabulate(double (*f)(double),double first,double last,double incr)这里的参数double (*f)(double)是一个指向参数和返回值都为double型的函数的指针——即f,既然f指向一个函数,那么这个函数就是*f,所以调用的时候就是(*f)(x).

架设你有一个函数是double g(double d);
若f=g;//g是函数名,也是函数的地址
则通过f指针调用g函数可以这样(*f)(x).
iEverX 2012-06-28
  • 打赏
  • 举报
回复
f是一个函数指针,f的声明如下

double f(double);

调用的时候,tabulate(f, a, b, c);由于传进入的是指向函数入口的指针,知道函数入口,就可以直接执行函数了,所以调用的时候,用(*f)(x),实际上,也可以直接用 f(x)。
w346581442 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
如果没有看错的话,你这个是回调函数,
把f作为一个参数传入函数tabulate()中,并且这个函数tabulate调用另一个
函数ciel();而这个f就是是函数ciel();
希望你懂了
[/Quote]

我确实没懂
xitijie 2012-06-28
  • 打赏
  • 举报
回复
那的看你传给f的是那个函数名,是哪个函数就调用那个函数,至于(*f)(x)这种形式与f(x)等同
彭家老三 2012-06-28
  • 打赏
  • 举报
回复
??函数指针,指针函数。
赵4老师 2012-06-28
  • 打赏
  • 举报
回复
给个前两天我回复另一贴用函数指针的例子。
http://topic.csdn.net/u/20120626/09/a2269fa7-e4b6-4cb5-86cc-904449b6ffec.html
dx364797629 2012-06-28
  • 打赏
  • 举报
回复
如果没有看错的话,你这个是回调函数,
把f作为一个参数传入函数tabulate()中,并且这个函数tabulate调用另一个
函数ciel();而这个f就是是函数ciel();
希望你懂了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧