在学习了指针进阶后,对各种指针如(数组指针、指针数组、函数指针等)有了更深刻的理解和印象,有了函数指针,对于我们在工程中的应用来说,可以帮我们省去冗杂的代码,提高代码的可阅读性,下面我们来看看是如何利用函数指针实现这个小计算机。
只使用函数指针
我们的main函数代码如上,我们使用一个do while循环,来完成这个计算机的每一次计算。训练里面嵌套一个switch循环,来给使用者选择要进行的计算类型。switch循环的条件是我们的输入input来给我们选择计算类型,在case里面运行函数来计算结果。
menu函数和计算函数都是比较简单的函数实现,在此不再详细介绍。
重点说一下calc函数,使用到了函数指针。
void calc(int (*pf)(int, int))
在这里,calc函数的参数是一个函数指针,返回类型是int,函数参数则是int,int,用于接受我们的计算函数,把函数的地址直接传入calc,使用calc的接受值来进行计算,可以减少冗杂重复的代码编写,实现程序的简洁化m3bro。
使用函数指针数组
在上面的基础上 ,我们使用函数指针数组可以更快的实现这个功能;思路提升之处在于把函数放进函数指针数组里,在选择界面功能时就能直接选择函数实现,提高程序运行效率。
只需要先定义一个函数指针数组:int (*arr[])(int, int) = { 0,Add,Sub,Mul,Div } ;
把函数指针放进数组里面,调用的时候,可以直接使用int ret=arr [input] (x,y);
这段调用的代码即是用input选择arr函数指针数组中的元素,也就是我们的函数功能,接着再传入x和y的值就能够实现,这两个方法都是各有妙处,每一种都有我们可以学习的思想之处。