CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

typedef int (*SUMMARY)(int);是什么意思?

楼主famugong(伐木工)2000-09-01 14:55:00 在 VC/MFC / 基础类 提问

typedef   int   (*SUMMARY)(int);是什么意思?后面应该是函数指针吧,但前面加了一个typedef是什么意思呢? 问题点数:20、回复次数:10Top

1 楼ChengZi()回复于 2000-09-01 15:42:00 得分 0

定义SUMMARY为函数指针类型。  
  Example:  
  SUMMARY   pF;  
  int   Foo(int   x)  
  {  
        ....  
        return   x;  
  }  
  pF   =   Foo;  
   
  然后可以调用:  
   
  int   y   =   (*pF)(3);  
          y   =   (*pF)(5);  
  Top

2 楼Holly()回复于 2000-09-01 16:46:00 得分 0

象使用typedef   struct   tagSTRUCT{}一样,你就可以用定义的东西声明变量了;  
  实际就是自己定义一个类型!Top

3 楼iforever(iforever)回复于 2000-09-01 17:07:00 得分 0

看看帮助就行了.  
  ChengZi的例子很好  
  Top

4 楼famugong(伐木工)回复于 2000-09-01 20:52:00 得分 0

在我的程序里是这样的:  
  在Dll中有一函数int   Summary(int   n)  
  在客户程序里有这样几行:  
  typedef   int   (*SUMMARY)(int);//这里我不太明白,如果要获得函数指针,为何要typedef?  
                                                          //书上说typedef的语法是typedef   已有类型名   新类型名,  
                                                          //这里的typedef又有什么用呢?  
  ...  
  Summary=(SUMMARY)GetProAddress(ghMathsDLL,"Summary");  
  ...  
  int   nSum=Summary(10);//如果SUMMARY是函数指针,那么Summary应该是一个指针,  
                                            //那么这行代码是可以的吗?  
   
   
   
  Top

5 楼ybchen(我)(是)(菜)(鸟)(我)(怕)(谁)回复于 2000-09-01 22:15:00 得分 10

int   nSum=Summary(10);   //是可以的  
   
  //如果不用   typedef   可以这样:  
  int   (*Summary)(int);   //定义一个指向参数为一个int,返回值是int的函数  
  Summary   =   (int(*)(int))   GetProAddress(ghMathsDLL,"Summary");   //地址赋值需要类型转换  
  Summary(10);   //执行这个地址的函数  
   
  //因为函数名本身就是一个地址(指针)  
  //比如  
  int   MyFunc(int   i)   //函数的地址为   MyFunc,参数和返回值都是int  
  {  
      return   i;  
  }  
  //和  
  int   MyArray[]   =   //数组的地址为   MyArray  
  {  
    1,   2,   3  
  };  
   
  int   *pArray;  
  int   (*pFunc)(int);  
   
  pArray   =   MyArray;  
  pFunc   =   MyFunc;  
   
  int   x   =   pArray[1];   //地址为   pArray   的数组的第   2   个元素  
  int   y   =   pFunc(1);   //地址为   pFunc   的函数,参数为1时的返回值  
  //同样  
  x   =   MyArray[1];   //地址为   MyArray   的数组的第   2   个元素  
  y   =   MyFunc(1);   //地址为   MyFunc   的函数,参数为1时的返回值  
  Top

6 楼ybchen(我)(是)(菜)(鸟)(我)(怕)(谁)回复于 2000-09-01 22:32:00 得分 0

比较有意思的在这儿  
   
  1:在DOS下执行重新启动可以这样编  
  //注:0xffff0000l   是   BIOS   重新启动函数的地址  
  void   main(void)  
  {  
  void   far   (*Reboot)()   =   (void   far(*)())   0xffff0000l;  
  Reboot();  
  }  
   
  也可以这样编  
  void   main(void)  
  {  
  ((void   far(*)())   0xffff0000l)();   //直接调用这个地址的函数  
  }  
   
  那刚才的程序也可以这样编:  
  int   nSum   =   ((int(*)(int))   GetProcAddress(ghMathsDLL,"Summary"))(10);  
  即参数为10时的函数值赋值给   nSum。  
  这个程序只是看看,虽然调用函数的格式没有错,但实际不能这样编,  
  因为无法判断GetProcAddress函数调用成功与否  
  Top

7 楼famugong(伐木工)回复于 2000-09-02 10:18:00 得分 0

请再解释一下这里typedef的用法好吗.Top

8 楼joke100(咱们去SLEEP吧...)回复于 2000-09-02 13:11:00 得分 10

typedef   int   (*SUMMARY)(int);定义了一个指向int型返回值且带有一个int型参数的函数指针类型。在DLL导出操作中应用最为广泛。  
   
  这是语法问题,另外一种更常见的typedef应用是重定义数据类型标识,比如typedef   WORD   myDataType;这样在你的程序里使用myDataType与WORD等价。Top

9 楼famugong(伐木工)回复于 2000-09-02 16:14:00 得分 0

谢谢,  
  小弟我分已经不多了,还请见谅.Top

相关问题

  • typedef int (*SUMMARY)(int);解释一下什么意思
  • typedef int (WINAPI *PROC)();是什么意思??
  • 请问 typedef int(FUNC2) (int*,int*,int*);是什么意思?谢谢!
  • typedef int(&riff)(int,int)是什么意思啊??
  • typedef const vector<unsigned int>* (*pfunc)(int)请解释一下意思。
  • 请问这样的语句是什么意思? typedef int (WINAPI* INITIALIZE) (int, int, char*, int, int);
  • typedef list<CPlugin *> PluginsList /什么意思?
  • 这个typedef是什么意思?
  • typedef void * sql_context;是什么意思?
  • "typedef long SmiINT, WINFAR *SmiLPINT;"什么意思?

关键词

  • 函数
  • 指针
  • typedef
  • 定义
  • summary
  • 类型
  • 意思
  • 调用
  • 地址
  • myfunc

得分解答快速导航

  • 帖主:famugong
  • ybchen
  • joke100

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo