【C语言】——指针五:转移表与回调函数
一、转移表
1.1、转移表的定义
在之前的学习中,我们学习了函数指针数组(详情请看【C语言】——指针四:字符指针与函数指针变量),在最后。我曾问到:函数指针数组有什么用呢?别急,本文给大家细细道来。
函数指针数组常常被用在转移表中,那转移表是什么呢?
转移表是一种数据结构,他用于根据输入值来确定需要执行的函数或操作,转移表通常是一个包含指针的数组,数组中每个元素包含着指向对应函数或操作的指针,通过查找对应的输入值进行索引,程序可以调用对应位置的函数或操作,从而实现通过输入值动态调度程序执行不同的功能。
图示:
转移表的使用可以避免冗长的 i f − e l s e if-else if−else 语句或 s w i t c h switch switch 语句,有效提高代码的可读性和维护性。通过利用转移表,程序可以根据输入值在常量时间内找到对应的操作或函数,并进行执行,而不需要逐个判断条件。转移表在实现分支逻辑较多、需要快速查找执行路径的情况下非常有用。
不知道你懂了吗?如果此时的你还有点懵,我们举一些生活中的例子来加深理解吧。
- 比如我们去餐厅吃饭,点菜时菜单就像是一个转移表,菜单上的每个菜,可看成转移表中的函数指针,每道菜对应这一个价格和烹饪方法,即函数定义。当我们选择后,餐厅通知厨师开始烹饪,即执行相关函数。总结下来,即:菜单就是转移表,通过菜名(输入值)来决定具体的烹饪操作(函数)。
- 另外,想象你玩一个游戏,根据不同的按键操作进行不同的动作,比如按下"A"键跳跃、按下"B"键攻击。游戏中的按键映射就可以看作是一个转移表,根据玩家的操作(输入值)执行相应的游戏动作(函数)。
1.2、简易计算器的一般实现
下面,我们来用一般方法来实现一个简易计算器:
#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;
}
void menu()
{
printf("***************************\n");
printf("*** 1: Add 2: Sub ***\n");
printf("*** 3: Mul 4: Div ***\n");
printf("*** 0: exit ***\n");
printf("***************************\n");
}
int main()
{
int x = 0, y = 0;
int input = 0;
int ret = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("请输入要计算的两个数:");
scanf("%d %d", &x, &y);
ret = Add(x, y)

本文介绍了如何在C语言中使用转移表和回调函数简化简易计算器的实现,通过转移表避免冗余的if-else和switch语句,以及回调函数的概念和在计算器中的应用,提升代码效率和可维护性。

最低0.47元/天 解锁文章
2536





