指针(4)---转移表

简介: 指针(4)---转移表

在C语言中,转移表是一个指针数组,通常的作用是用来提高代码的可读性和维护性,也就是使得代码更加“好看”。

例如:

现在要求写一个关于计算器的代码用于基本的四则运算。

一般的写法:

//设置加减乘除的函数以便后续调用
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;
}
//主函数实现计算器,并假设输入1为加法,2为减法,3为乘法,4为除法
int main()
{
 int x, y;
 int input = 1;
 int ret = 0;
 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;
}
 return 0;

这种做法相当于使用switch语句来达到分支选项的实现,但是我们认为该代码的可读性以及长度都可以进行优化。我们可以使用一个函数指针数组(也就是一个转移表)来优化它。

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 }; //转移表
 printf( "请选择:" );
 scanf("%d", &input);
 printf( "输⼊操作数:" );
 scanf( "%d %d", &x, &y);
 ret = (*p[input])(x, y);
 printf( "ret = %d\n", ret);
}

首先从长度上我们发现明显短了不少;其次我们可以注意到原先向纵向延伸的一系列选择(加减乘除)变为了横向延伸,函数指针数组可以使得函数在数组内元素变化的情况下直接被使用,这也脱离了switch语句的限制。

总而言之,操作表的使用可以大大提高程序的执行效率。

目录
相关文章
|
1月前
|
存储 C++
C生万物 | 从浅入深理解指针【第三部分】(转移表的实现)
C生万物 | 从浅入深理解指针【第三部分】(转移表的实现)
|
9月前
|
机器学习/深度学习 索引
指针-哈希索引表单词排序
指针-哈希索引表单词排序
|
1月前
|
存储
指针详解(冒泡排序、qsort、回调函数、转移表)(三)
指针详解(冒泡排序、qsort、回调函数、转移表)(三)
|
程序员 C语言
【C语言进阶】指针与数组、转移表详解
本文讲解:C语言进阶指针与数组、转移表详解
|
26天前
|
C语言
C语言指针带代码
C语言指针带代码
24 3
|
12天前
|
安全 程序员 编译器
【C语言基础】:深入理解指针(二)
【C语言基础】:深入理解指针(二)
【C语言基础】:深入理解指针(二)
|
2天前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
|
5天前
|
C语言
C语言----深入理解指针(5)(一)
C语言----深入理解指针(5)
11 2
|
12天前
|
C语言
【C语言基础】:深入理解指针(终篇)
【C语言基础】:深入理解指针(终篇)
|
12天前
|
存储 C语言 C++
【C语言基础】:深入理解指针(三)
【C语言基础】:深入理解指针(三)