| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1460 人关注过本帖
标题:这是函数对象的问题么?
只看楼主 加入收藏
lsrwan
Rank: 2
等 级:论坛游民
帖 子:31
专家分:17
注 册:2009-10-11
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:1 
这是函数对象的问题么?
这是历遍链表的程序
想问下下面的语句调visit是什么用法,这里visit是指针还是函数对象下,那些书有介绍此用法的说明呀。
 ListTraverse(L,visit);

 void visit(ElemType c) /* 与main2-1.c不同 */
 {
   printf("%d ",c);
 }

Status ListTraverse(LinkList L,void(*vi)(ElemType))
 /* vi的形参类型为ElemType,与bo2-1.c中相应函数的形参类型ElemType&不同 */
 { /* 初始条件:线性表L已存在 */
   /* 操作结果:依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败 */
   LinkList p=L->next;
   while(p)
   {
     vi(p->data);
     p=p->next;
   }
   printf("\n");
   return OK;
搜索更多相关主题的帖子: 对象 函数 
2010-03-24 21:58
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:20 
你这里是一个函数指针作为参数   
  先来看看函数指针的概念   
  函数指针的含义   
    函数指针即指向函数地址的指针。利用该指针可以知道函数在内存中的位置。因此也可以利用函数指针调用函数。   
  函数指针的定义方法:   
   <类型>   (*   <函数名>)(......)   
  例如:   
   int   (*func)(   )   
  这里,func就是一个函数指针。   
  注意:int   *func(   )和int   (*func)(   )的区别   
   int   *func(   );   //这是返回一个整型指针的函数     
   int   (*func)(   );   //这是一个函数指针   
  2、函数指针的使用方法   
    函数指针即该指针指向的是一个函数的地址。也就是说,它的值只能是代码区中的一个地址。因此不能将其它存储区域的变量地址赋给函数指针。     
   
  例4.5.22假定有下面的函数声明   
   int   ptr;   
   int   fn(int);   
   int   (*fp)(int);   
   指出下面的语句是否合法?,为什么?。   
   fp=fn;   //正确,将函数fn的地址赋给fp   
   fp=fn(5);   //错误,返回给fp的结果不是一个函数地址。   
   fp=&ptr;   //   错误,ptr的地址不在程序代码区,两种数据类型不能转换。     
   
  从上面的例子可以看出:   
  (1)   不能将普通变量的地址赋给函数指针;   
  (2)   不能将函数的调用赋给函数指针   
  (3)   可以将函数名赋给一个函数指针   
  3、   函数指针用作函数参数     
   
  例4.5.23   看下面程序的运行结果   
   #include   <iostream.h>   
   #include   <math.h>   
   double   sigma(double   (*func)(double),double   dl,double   du)   
   {   
    double   dt=0.0;   
    for   (double   d=dl;d<du;d+=0.1)   
    dt+=func(d);   
    return   dt;   
   }   
   void   main(   )   
   {   
    double   dsum;   
    dsum=sigma(sin,0.1,1.0);   
    cout<<"the   sum   of   sin   from   0.1   to   1.0   is   "<<dsum<<endl;   
    dsum=sigma(cos,0.5,3.0);   
    cout<<"the   sum   of   cos   from   0.5   to   3.0   is   "<<dsum<<endl;   
   }   
   结果是:     
   the   sum   of   sin   from   0.1   to   1.0   is   5.01388   
   the   sum   of   cos   from   0.5   to   3.0   is   -2.44645     
   
   从上面的程序可以看出,利用函数指针可以对函数间接调用。   
2010-03-25 09:12
快速回复:这是函数对象的问题么?
数据加载中...
 
   



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

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