求助:函数指针数组的应用问题
本帖最后由 sj1125055001 于 2015-4-1 21:12 编辑目的是想利用函数指针数组的指针
但是在赋值的时候出错(红色标注的)
#include<stdio.h>
int (*(*FunArray))(int,int);
int (*fun)(int,int);
int add(int,int);
int sub(int,int);
int mul(int,int);
int div(int,int);
int main()
{
int FunFlag=0,a,b;
fun=add;
fun=sub;
fun=mul;
fun=div;
FunArray=fun;
//FunArray=&fun;
while(1)
{
printf("1、加法。\n2、减法。\n3、乘法运算。\n4、除法运算。\n5、退出。\n");
scanf("%d",&FunFlag);
if(FunFlag==5)
break;
printf("输入数据:");
scanf("%d %d",&a,&b);
//printf("结果是:%d.\n",fun(a,b));
}
printf("sizeof FunArray:%d.\n",sizeof(FunArray));
printf("sizeof fun:%d.\n",sizeof(fun));
return 0;
}
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)
{
if(b!=0)
return (a/b);
else
return b;
}
编译器不是告诉你了么
那玩意不是l-value
楼主没学过英语? 用typedef好懂一些
typedef int (*pFun)(int,int);//声明新的类型
pFun FunArray;//用新声明的类型创建 一个函指数组
int add(int,int);
int sub(int,int);
int mul(int,int);
int div(int,int);
void main(void)
{
FunArray=add;
FunArray=sub;
FunArray=mul;
FunArray=div;
} 楼上正解,要不然真的很容易弄错的。 FunArray=*fun;你的错误就没了
但是又出现新的bug了 本帖最后由 磊磊映画 于 2015-4-1 23:59 编辑
楼主 ,完美解决你的问题
问你一个问题 FunArray[]是干啥的 感觉没起作用呢 ???
上代码
#include<stdio.h>
int (*(*FunArray))(int,int);
int (*fun)(int,int);
int add(int,int);
int sub(int,int);
int mul(int,int);
int div(int,int);
int main()
{
int FunFlag=0,a,b;
fun=add;
fun=sub;
fun=mul;
fun=div;
FunArray=*fun;
while(1)
{
printf("1、加法。\n2、减法。\n3、乘法运算。\n4、除法运算。\n5、退出。\n");
scanf("%d",&FunFlag);
if(FunFlag==5)
break;
printf("输入数据:");
scanf("%d,%d",&a,&b);
printf("结果是:%d\n",fun(a,b));
break;
}
printf("sizeof FunArray:%d.\n",sizeof(FunArray));
printf("sizeof fun:%d.\n",sizeof(fun));
return 0;
}
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)
{
if(b!=0)
return (a/b);
else
return b;
}
调试界面
1、加法。
2、减法。
3、乘法运算。
4、除法运算。
5、退出。
1
输入数据:1,2
结果是:3
sizeof FunArray:16.
sizeof fun:16.
Press any key to continue
本帖最后由 磊磊映画 于 2015-4-2 00:01 编辑
修改的三个地方第四个是问题
1. FunArray=fun; 改成了FunArray=*fun;
FunArray是个函数指针数组必须指向函数指针类型的数据,指向函数指针的指针数组*运算就是指针
2. break;
while(1)里面最后加了退出,要不一直在打印
3.printf("结果是:%d.\n",fun(a,b));
fun是指向函数指针的指针数组,而且是二维的 楼主缺少一维。
改成printf("结果是:%d.\n",fun(a,b));
实参传入a,b倒是想的挺周全的,要不光指向函数,没用实参传入,怎么执行呢?
4. scanf("%d %d",&a,&b);
怎么看着不习惯?
我一般这么写
scanf("%d,%d",&a,&b);
在下愚见,有不对的地方还望指教,谢谢
好的,睡觉,各位晚安。 磊磊映画 发表于 2015-4-1 23:58
修改的三个地方第四个是问题
1. FunArray=fun; 改成了FunArray=*fun;
FunArray是个函数指针数组必 ...
至于你说的第三点
这是我这个程序的
我是在这个程序上的基础上,想试试函数指针数组指针
才出现了个本帖中的程序
#include<stdio.h>
int (*fun)(int,int);
int add(int,int);
int sub(int,int);
int mul(int,int);
int div(int,int);
int main()
{
int FunFlag=0,a,b;
fun=add;
fun=sub;
fun=mul;
fun=div;
while(1)
{
printf("1、加法。\n2、减法。\n3、乘法运算。\n4、除法运算。\n5、退出。\n");
scanf("%d",&FunFlag);
if(FunFlag==5)
break;
printf("输入数据:");
scanf("%d %d",&a,&b);
printf("结果是:%d.\n",fun(a,b));
}
return 0;
}
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)
{
if(b!=0)
return (a/b);
else
return b;
}
本帖最后由 磊磊映画 于 2015-4-2 10:00 编辑
sj1125055001 发表于 2015-4-2 09:52
至于你说的第三点
这是我这个程序的
我是在这个程序上的基础上,想试试函数指针数组指针
哦,明白了,
1.还是用Fun这个比较好,通过函数指针指向函数指针数组,指针数组再去指向函数。使用函数指针的话抽象的更好,比较上层,与底层隔离更好。
2.不用你这么复杂,不使用函数指针数组,只使用函数指针就能实现状态机了。
你学会函数指针的应用就是实现状态机。
main_state1();
main_state2();
main_state3();
更高效的利用cpu。让它实时处理最重要的任务
页:
[1]