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 }; 创建了一个各个元素为函数指针的数组,这个数组中的函数指针指向特定的函数,所以我们就可以通过下标的访问方式来进行函数的调用了。这个就是转移表。

相关推荐
wangjialelele1 天前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
森G1 天前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
weixin_395448911 天前
mult_yolov5_post_copy.c_cursor_0205
c语言·python·yolo
Z9fish1 天前
sse哈工大C语言编程练习20
c语言·开发语言·算法
晓13131 天前
第六章 【C语言篇:结构体&位运算】 结构体、位运算全面解析
c语言·算法
梵刹古音1 天前
【C语言】 指针与数据结构操作
c语言·数据结构·算法
刘琦沛在进步1 天前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
VekiSon1 天前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
2的n次方_1 天前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构
_F_y1 天前
C语言重点知识总结(含KMP详细讲解)
c语言·开发语言