NO.32 ---- C语言函数指针数组的使用之转移表

函数指针数组:首先它是一个数组,这个数组是用来存放函数指针的。
函数指针的定义:int(*p[1024] (int,int);
说明:p先和 [] 结合说明这是一个数组,数组内容是int( *)( )类型的函数指针;
函数指针数组的用途:转移表
例子:支持四则运算的计算器,下面通过两种方法来对比转移表的作用

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 函数指针数组的使用——转移表

// 计算器

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 menu()
{
printf("————————————————————————\n");
printf("0、结束程序!\n");
printf("1、add\n");
printf("2、sub\n");
printf("3、mul\n");
printf("4、div\n");
printf("————————————————————————\n");

int choice = 0;
printf("请输入您的选择:");
scanf("%d", &choice);
return choice;
}
int main()
{
int x;
int y;
printf("请输入操作数:");
scanf("%d %d", &x, &y);

int ret;

// 常规方法,虽然能够实现,但是比较麻烦
//while (1)
//{
//
//	int choice = menu();

//	if (choice == 1)
//	{
//		ret = Add(x, y);
//	}
//	else if (choice == 2)
//	{
//		ret = Sub(x, y);
//	}
//	else if (choice == 3)
//	{
//		ret = Mul(x, y);
//	}
//	else if (choice == 4)
//	{
//		ret = Div(x, y);
//	}
//	else if (choice == 0)
//	{
//		printf("程序结束!\n");
//		break;
//	}
//	else 
//	{
//		printf("输入错误,请重新输入!\n");
//		continue;
//	}
//	printf("你计算的两个数的值为:%d\n", ret);
//}
//

// 方法二:使用转移表

int(*p[5])(int x, int y) = { 0, Add, Sub, Mul, Div };          // 这里就体现了转移表的作用

while (1)
{
	int choice = menu();
	if (choice <= 4 && choice >= 1)
	{
		ret = (*p[choice])(x, y);
	}
	else if (choice == 0)
	{
		printf("程序结束!");
		break;
	}
	else
	{
		printf("输入错误,请重新输入\n");
		continue;
	}
	printf("你所求的两个数的值为:%d\n", ret);
}


system("pause");
return 0;
}

程序运行结果:在这里插入图片描述

总结:适当的时候使用转移表可以提高编程效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值