公司做的网站列入什么科目,代理游戏,中国企业培训网,wordpress 定时发布失败前言#xff1a;小伙伴们又见面啦#xff0c;今天我们来讲解一个将函数#xff0c;指针#xff0c;数组这三个C语言大将整合在一起的知识——函数指针数组。同时来告诉小伙伴们我们上一篇文章的伏笔——函数指针的具体用法。 目录
一.什么是函数指针数组
二.函数指针数组…前言小伙伴们又见面啦今天我们来讲解一个将函数指针数组这三个C语言大将整合在一起的知识——函数指针数组。同时来告诉小伙伴们我们上一篇文章的伏笔——函数指针的具体用法。 目录
一.什么是函数指针数组
二.函数指针数组的形式
三.函数指针数组的使用
四.总结 一.什么是函数指针数组
我们前边已经学习过了函数指针也学习过指针数组那么什么是函数指针数组呢 这里要告诉大家只要哪个名词在最后就说明它的本质是这个名词所以函数指针数组的本质就是一个数组。而这个数组存放的是什么东西呢——函数指针。
二.函数指针数组的形式
OK那么已经知道了函数指针数组是什么东西之后我们来思考一下怎么来表示它。
这个其实简单它是一个数组是一个存放函数指针类型的数组我们参考之前讲过的函数指针和指针数组的表示方法得出函数指针数组的形式为 void (* arr[])(void ,void) { }; arr[]代表它是数组把arr[]去掉剩下的void (*)(void , void)则表示其存放的类型为函数指针。
三.函数指针数组的使用
OK现在我们已经清楚了函数指针数组的形式那么该怎么具体使用它呢
假设我们现在要写一个代码模拟实现计算器的加、减、乘、除
#includestdio.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;
}
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 a;int b;int input;int ret;do {Menu();printf(请选择-:);scanf(%d, input);switch (input){case 1:printf(请输入两个运算数);scanf(%d %d, a, b);ret Add(a, b);printf(%d\n, ret);break;case 2:printf(请输入两个运算数);scanf(%d %d, a, b);ret Sub(a, b);printf(%d\n, ret);break;case 3:printf(请输入两个运算数);scanf(%d %d, a, b);ret Mul(a, b);printf(%d\n, ret);break;case 4:printf(请输入两个运算数);scanf(%d %d, a, b);ret Div(a, b);printf(%d\n, ret);break;case 0:printf(退出计算器\n);break;default:printf(输入错误请重新输入\n);break;}} while (input);return 0;
}
我们将四则运算写成函数形式并通过do-while循环和switch-case语句来实现计算器的加、减、乘、除功能。
但是我们能看出这样的写法是不是太过于繁琐很多语句都重复使用了很多次。
我们已经把四则运算写成了函数而且我们也知道怎么用指针调用函数那么我们现在是不是可以考虑将这些函数全放在一个数组中在通过数组去调用是不是更加的简洁方便呢
下面我们就用函数指针数组来实现一下
#includestdio.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;
}
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 a;int b;int input;int ret;int(*Calarr[])(int, int) { NULL,Add,Sub,Mul,Div };do {Menu();printf(请选择-);scanf(%d, input);if (input 0){printf(退出计算器\n);}else if (input 1 input 4){printf(请输入两个操作数);scanf(%d %d, a, b);ret Calarr[input](a, b);//调用printf(%d\n, ret);}else{printf(输入错误请重新输入\n);}} while (input);return 0;
}
来看用函数指针数组来实现。
我们将四个函数的地址都通过函数指针来保存在数组中但是我们知道数组的下标是从0开始的那么我们希望选择的数字和计算器选择数达成一致便在数组下标为0的位置放一个NULL空指针。这时候我们的输入数input就可以帮助我们从数组中调用对应的函数来实现运算。
这样的代码是不是比上边的简单整洁多了。
当我们想要同时管理多个函数时便可以使用函数指针数组这便是函数指针数组的实际用法。
四.总结
函数指针数组有关的知识和用法的讲解到这里就结束啦。其实这部分内容还是很好理解哒。
最后不要忘记一键三连呀
我们下期再见