C语言 之 理解指针(5)

转移表

本章主要讲的是函数指针数组的用途:转移表

让我们来看看下面的代码:

计算器的一般实现:

复制代码
#include <stdio.h>
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; //除法函数
}
int main()
{
	int x, y;
	int input = 1;
	int ret = 0;
	do
	{
		printf("*************************\n");
		printf(" 1:add 2:sub \n");
		printf(" 3:mul 4:div \n");
		printf(" 0:exit \n");
		printf("*************************\n");
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("输入操作数:");
			scanf("%d %d", &x, &y);
			ret = add(x, y);
			printf("ret = %d\n", ret);
			break;
		case 2:
			printf("输入操作数:");
			scanf("%d %d", &x, &y);
			ret = sub(x, y);
			printf("ret = %d\n", ret);
			break;
		case 3:
			printf("输入操作数:");
			scanf("%d %d", &x, &y);
			ret = mul(x, y);
			printf("ret = %d\n", ret);
			break;
		case 4:
			printf("输入操作数:");
			scanf("%d %d", &x, &y);
			ret = div(x, y);
			printf("ret = %d\n", ret);
			break;
		case 0:
			printf("退出程序\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);
	return 0;
}

那我们在学习了函数指针数组之后,我们如何改造上面的代码的写法呢?

使用函数指针数组的实现:

复制代码
#include <stdio.h>
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;
}
int main()
{
	int x, y;
	int input = 1;
	int ret = 0;
	int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
	do
	{
		printf("*************************\n");
		printf(" 1:add 2:sub \n");
		printf(" 3:mul 4:div \n");
		printf(" 0:exit \n");
		printf("*************************\n");
		printf("请选择:");
		scanf("%d", &input);
		if ((input <= 4 && input >= 1))
		{
			printf("输入操作数:");
			scanf("%d %d", &x, &y);
			ret = (*p[input])(x, y);
			printf("ret = %d\n", ret);
		}
		else if (input == 0)
		{
			printf("退出计算器\n");
		}
		else
		{
			printf("输⼊有误\n");
		}
	} while (input);
	return 0;
}

这就是函数指针数组的使用啦!int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; 创建了一个各个元素为函数指针的数组,这个数组中的函数指针指向特定的函数,所以我们就可以通过下标的访问方式来进行函数的调用了。这个就是转移表。

相关推荐
Kratzdisteln4 小时前
【C语言】Dev-C++如何编译C语言程序?从安装到运行一步到位
c语言·c++
Doro再努力5 小时前
数据结构04:力扣顺序表3道例题解题思路与代码实现
c语言·数据结构
疯狂吧小飞牛5 小时前
Lua C API 中的注册表介绍
java·c语言·lua
疯狂吧小飞牛8 小时前
Lua C API 中一段LUA建表过程解释
c语言·junit·lua
potato_may10 小时前
第18讲:C语言内存函数
c语言·数据结构·算法
顾晨阳——10 小时前
C/C++字符串
c语言·c++·字符串
Nix Lockhart11 小时前
《算法与数据结构》第七章[算法4]:最短路径
c语言·数据结构·学习·算法·图论
坚持编程的菜鸟14 小时前
LeetCode每日一题——在区间范围内统计奇数数目
c语言·算法·leetcode
qiuiuiu41314 小时前
正点原子RK3568学习日志6-驱动模块传参
linux·c语言·开发语言·单片机·学习
盛小夏15 小时前
从零开始学C语言:小白也能轻松上手
c语言