1函数指针数组(应用:转移表)
//void menu()
//{
// printf("---------------计算器---------------\n");
// printf("------ 1.ADD 2.SUB -------\n");
// printf("------ 3.MUL 4.DIV -------\n");
// printf("---------------0.EXIT--------------\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 input = 0;
// int r = 0;
// int x = 0;int y = 0;
// //转移表
// int (*p[])(int, int) = {NULL,ADD,SUB,MUL,DIV };
//
// do
// {
// menu();
// printf("请选择:\n");
// scanf("%d", &input);
//
// if (input>=1 && input <= 4 )
// {
// printf("请输入两个操作数:\n");
// scanf("%d,%d", &x, &y);
// r = p[input](x, y);
// printf("%d\n", r);
// }
// else if (input == 0)
// {
// printf("退出\n");
// }
// else
// {
// printf("输入错误,请重新输入:\n");
// }
// } while (input);
//
// return 0;
//}
2
//void menu()
//{
// printf("---------------计算器---------------\n");
// printf("------ 1.ADD 2.SUB -------\n");
// printf("------ 3.MUL 4.DIV -------\n");
// printf("---------------0.EXIT--------------\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 input = 0;
// int r = 0;
// int x = 0;int y = 0;
// do
// {
// menu();
// printf("请选择:\n");
// scanf("%d", &input);
//
// switch (input)
// {
// case 1:
// printf("请输入两个操作数:\n");
// scanf("%d%d", &x, &y);
// r = ADD(x, y);
// printf("%d\n", r);
// break;
// case 2:
// printf("请输入两个操作数:\n");
// scanf("%d%d", &x, &y);
// r = SUB(x, y);
// printf("%d\n", r);
// break;
// case 3:
// printf("请输入两个操作数:\n");
// scanf("%d%d", &x, &y);
// r = MUL(x, y);
// printf("%d\n", r);
// break;
// case 4:
// printf("请输入两个操作数:\n");
// scanf("%d%d", &x, &y);
// r = DIV(x, y);
// printf("%d\n", r);
// break;
// case 0:
// printf("退出\n");
// break;
// default:
// printf("选择错误\n");
// }
// } while (input);
//
// return 0;
//}
3回调函数:即通过函数指针调用的函数
void menu()
{
printf("---------------计算器---------------\n");
printf("------ 1.ADD 2.SUB -------\n");
printf("------ 3.MUL 4.DIV -------\n");
printf("---------------0.EXIT--------------\n");
}
int (*p[])(int, int) = { ADD,SUB,MUL,DIV };
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 calcint(*p)(int,int))//(int input)
{
int x = 0; int y = 0;
int r = 0;
printf("请输入两个操作数:\n");
scanf("%d%d", &x, &y);
r = p(x,y);//p[input](x,y)
printf("%d\n", r);
return r;
}
int main()
{
int input = 0;
int r = 0;
int x = 0;int y = 0;
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
calc(ADD);
break;
case 2:
calc(SUB);
break;
case 3:
calc(MUL);
break;
case 4:
calc(DIV);
break;
case 0:
printf("退出\n");
break;
default:
printf("选择错误\n");
}
} while (input);
return 0;
}