本篇主要分别使用函数指针数组的方法和回调函数的方法编写一个简单的计算器。
函数指针方法
#include <stdio.h>
void menu() //打印菜单的函数
{
printf("*******************\n");
printf("****1.add 2.sub****\n");
printf("****3.mul 4.div****\n");
printf("***** 0.exit ******\n");
printf("*******************\n");
}
int ADD(int x, int y) //加法函数
{
return x + y;
}
int SUB(int x, int y) //减法函数
{
return x - y;
}
int MUL(int x, int y) //乘法函数
{
return x * y;
}
int DIV(int x, int y) //除法函数
{
return x / y;
}
int main()
{
int a, b, ret,input;
int(*p[5])(int, int) = { 0,ADD,SUB,MUL,DIV };//定义一个函数指针数组,把四个函数的地址传进去,
do //为了使调用函数的下标与输入的值匹配,我们再前面多开辟一块空间。
{
menu();
printf("请输入选项:\n");
scanf("%d", &input);
if (input == 0)
printf("退出计算器\n");
else if (input > 0 && input < 5)
{
printf("请输入两个操作数:\n");
scanf("%d%d", &a, &b);
ret = p[input](a, b); //通过函数指针数组里的指针调用函数。
printf("计算结果为:%d\n", ret);
}
else
printf("输入错误,请重新输入!\n");
} while (input);
return 0;
}
在编写这个代码时,我们首先要思考怎么实现这个程序,首先我们要打印这个计算器的菜单,然后根据输入的数来确定我们进行什么运算,计算完成后我们需要再次回回来重新选择,然后计算,重复,所以我们可以先写一个do……while循环,然后输入选择项,根据输入的内容写程序执行什么内容,就可以用if语句来实现,而当我们选择进行计算时,首先我们要输入被计算的两个操作数,然后再进行计算,我们发现,这四个函数的参数类型和返回类型都一样,那么我们就可以创建一个函数指针数组,把四个函数的地址放进去,然后可以解引用来使用这些函数,之后我们再写一些如果输入错误的措施,就完成了这样一个函数。
回调函数方法
#include <stdio.h>
void menu() //打印菜单的函数
{
printf("*******************\n");
printf("****1.add 2.sub****\n");
printf("****3.mul 4.div****\n");
printf("***** 0.exit ******\n");
printf("*******************\n");
}
int ADD(int x, int y) //加法函数
{
return x + y;
}
int SUB(int x, int y) //减法函数
{
return x - y;
}
int MUL(int x, int y) //乘法函数
{
return x * y;
}
int DIV(int x, int y) //除法函数
{
return x / y;
}
void calat(int(*pa)(int, int)) //calat的函数参数为函数的地址,
{ //不同的函数地址,调用不同的函数
int ret,x,y;
printf("请输入两个操作数:");
scanf("%d%d", &x, &y);
ret = pa(x, y);
printf("计算结果为:%d\n", ret);
}
int main()
{
int a, b, ret, input;
do
{
menu();
printf("请输入选项:\n");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出计算!\n");
break;
case 1:
calat(ADD); //不同的输入值,给calat函数传不同的函数地址。
break;
case 2:
calat(SUB);
break;
case 3:
calat(MUL);
break;
case 4:
calat(DIV);
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}
在刚进入函数时,步骤与上面的代码相同,但是这里我们是用switch case语句实现对计算项目的选择,而我们可以写一个函数,用来实现计算,这个函数的参数就可以用函数地址,当我们输入的选项不同时,给计算函数不同的函数地址,然后计算函数在根据传来的函数地址来进行调用某一个函数进行计算,这就是一个简单的回调函数。