现在的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




