c语言函数指针数组

我们在模拟实现一个简单的计算器功能的时候,我们可能会写出下面这样的代码


但是呢,我们发现这个代码会有一些问题,比如说,我们想要给这样的代码增加一些新的功能,那么这个case语句会越来越长,而且,还有一个问题是,这个case语句里面有好多重复的代码。

我们有没有办法能使这个代码简化一点呢,我们这时候就可以用到之前所学过的函数指针数组了,

因为我们都是通过调用函数来进行计算的嘛,用函数指针数组也可以调用到函数,那么我们修改之后的代码如下:

这样的写法,我们有时候称呼他为转移表

怎么理解上面的这个代码呢

当然,其实我们除了使用函数指针数组的方式来修改最先开始的代码,其实我们还有一种办法在创建一个calc函数,把case里面的计算逻辑封装在calc函数里面,但是又有问题了

我们这样的话只能完成加法的运算啊,无法完成多种计算,这时需要把这个单独抽离出来。

我们知道,函数我们只需要知道地址就可以进行调用了,那我们就可以把进行函数的地址以参数的形式传递给calc函数就可以了。这样我们代码就可以改成这样。

这种写法怎么理解呢

这种写法属于回调函数了。

回调函数:

上面我们提到了回调函数;什么是回调函数呢?

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的条件发生时由另外的一方调用的,用于对该条件进行响应。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值