CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

现在的C标准还支持函数指针数组吗???

楼主pdw2009(不想做菜鸟)2006-03-06 23:58:15 在 C/C++ / C语言 提问

#include   "stdio.h"  
  #include   "conio.h"  
  #include   "math.h"  
  #define   M   3;  
   
  main(){  
        double   x;  
        double   delta=1.0;  
        double   first=0.0;  
        double   last=10.0;  
        double   (*f[M])();  
         
        int   i;  
        char   ch;  
        double   quad(double);  
        f[0]=quad;  
        f[1]=sqrt;  
        f[2]=log;  
        printf(f[0](2.3));  
        printf(f[1](2.3));  
        printf(f[2](2.3));  
  }  
  double   quad(double   x){  
        double   a=1.0,b=-3,c=5.0;  
        return((x*a)*x+b)*x+c;  
  }  
   
   
    出错:  
  11   D:\C\point\9.c   syntax   error   before   ';'   token    
  16   D:\C\point\9.c   `f'   undeclared   (first   use   in   this   function) 问题点数:10、回复次数:9Top

1 楼llf_hust()回复于 2006-03-07 00:15:56 得分 1

#include   "stdio.h"  
  #include   "conio.h"  
  #include   "math.h"  
  #define   M   3;  
  double   quad(double);  
  void   *a[]   =   {quad,sqrt,log};  
   
  typedef   double   (*FB)(double);  
  void   main()  
  {  
         
        double   delta=1.0;  
        double   first=0.0;  
        double   last=10.0;  
   
        printf("%lf\n",((FB)(a[0]))(2.3));  
        printf("%lf\n",((FB)(a[1]))(2.3));  
        printf("%lf\n",((FB)(a[2]))(2.3));  
  }  
  double   quad(double   x)  
  {  
        double   a=1.0,b=-3,c=5.0;  
        return((x*a)*x+b)*x+c;  
  }  
  Top

2 楼cunsh(村少)回复于 2006-03-07 00:17:00 得分 1

markTop

3 楼ox_thedarkness()回复于 2006-03-07 00:19:04 得分 1

1   请去掉   #define   M   3;   这个分号  
   
  2   函数类型不符,你的函数都有一个double参数:  
  double   (*f[M])(   double   );  
   
  3   printf...手误吧?  
   
  4   其实typedef一下更清晰:  
   
  typedef   double   (   D_FUNC_D   )   (double);  
  D_FUNC_D*   funcs   [   MAX_LEN   ];  
   
  Top

4 楼cunsh(村少)回复于 2006-03-07 00:20:50 得分 1

reinterpret_cast  
   
  因为函数指针类型之间是不能转换的.   所以你没办法把   一个函数的指针转换  
  为void   *.   在这种情况下可以用reinterpret_cast   来试试.   但除非万不得已  
  不要这么做.   因为这样的转换指针类型的代码在有些机器上是不行的.   这就是说  
  它没有可移植性.  
   
  //<<more   effective   c++>>Item   M2   尽量用C++风格的类型转换  
  书上说尽量不要这样转换呀.Top

5 楼ox_thedarkness()回复于 2006-03-07 00:48:27 得分 1

-     -   楼主的怎么看都是纯C代码把?  
   
  另外,楼主风格的函数指针不需要   reinterpret_cast   ...   二楼风格的才需要Top

6 楼ox_thedarkness()回复于 2006-03-07 00:49:40 得分 1

-     -    
  另外,你运行下楼主代码,就知道根本症结在  
  #define   M   3;    
  这个分号上....Top

7 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2006-03-07 08:18:44 得分 2

:)   marco   后面不用加   ;  
  一行就是一个定义,如果需要多行定义可以用   \   如果需要连接字符串可以用   #Top

8 楼wumingchenchao(一缕阳光)回复于 2006-03-07 11:14:12 得分 1

MARKTop

9 楼infidel(Leo.C)回复于 2006-03-07 12:20:03 得分 1

markTop

相关问题

  • c++中如何定义含有函数指针的结构体数组
  • 数组、指针及函数调用!?
  • 函数指针数组一问
  • 函数指针数组的问题
  • 怎样在C/C++中定义一个函数指针数组,然后怎样使用它??
  • “指向函数指针数组的指针”怎么使用?
  • 请问:如何用指针数组和函数指针做函数列表?
  • C++ 函数指针问题?
  • 请问有关函数指针数组的问题!!!!!!
  • 函数如何返回一个二维数组的指针?

关键词

  • 函数
  • 指针
  • 转换
  • 代码
  • double
  • quad
  • reinterpret
  • fb
  • define m3
  • 类型

得分解答快速导航

  • 帖主:pdw2009
  • llf_hust
  • cunsh
  • ox_thedarkness
  • cunsh
  • ox_thedarkness
  • ox_thedarkness
  • goodboy1881
  • wumingchenchao
  • infidel

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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