忻州凤凰山景区怎么样:函数指针出了问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 18:10:14
char code[]="+-*/";
int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
int mul(int a,int b){return a*b;}
int div(int a,int b){return a/b;}
char *func[4]={"add","sub","mul","div"} ;
int findcode(char c)
{
int i=0;
while(c){
if(c==code[i]) return i;
else i++;
}
}
char *f(char c)
{
int a;
a=findcode(c);
return func[a];
}
main()
{
int x;
int y;
int (*p)(int,int);
char c;

scanf("%d",&x);
scanf("%d",&y);
c=getch();
p=f(c);
printf("%d",(*p)(x,y));
getch();

}
结果总是出不来??为什么??
望高手指教

建议你好好看看函数指针的教程,你的用法有很大问题。
下面的程序是我再你的基础上改的。可以运行,供参考。

#include <conio.h>
#include <stdio.h>

char code[]="+-*/";
int myadd(int a,int b){return a+b;}
int mysub(int a,int b){return a-b;}
int mymul(int a,int b){return a*b;}
int mydiv(int a,int b){return a/b;}
//最好采用typedef来简化声明函数指针。
//而且指针不是字符串形式,请看下面两行
typedef int (*FP)(int,int);
FP func[4] = {myadd, mysub, mymul, mydiv};
int findcode(char c)
{
int i=0;
while(i<4){
if(c==code[i]) return i;
else i++;
}
}
FP f(char c)
{
int a;
a=findcode(c);
return func[a];
}
main()
{
int x;
int y;
FP p;
char c;

scanf("%d",&x);
scanf("%d",&y);
c=getch();
p=f(c);
//这里调用不用借饮用,本身p就是函数指针。
printf("%d",p(x,y));
getch();

}

如果不采用typedef,修改函数如下。

char code[]="+-*/";
int myadd(int a,int b){return a+b;}
int mysub(int a,int b){return a-b;}
int mymul(int a,int b){return a*b;}
int mydiv(int a,int b){return a/b;}

//typedef int (*FP)(int,int);
//FP func[4] = {myadd, mysub, mymul, mydiv};
int (*func[4])(int, int) = {myadd, mysub, mymul, mydiv};
int findcode(char c)
{
int i=0;
while(i<4){
if(c==code[i]) return i;
else i++;
}
}
int (*f(char c))(int, int)
{
int a;
a=findcode( c );
return func[a];
}
main()
{
int x;
int y;
int (*p)(int, int);
char c;

scanf("%d",&x);
scanf("%d",&y);
c=getch();
p=f( c );
printf("%d",p(x,y));
getch();

}