c语言-函数指针

以前也学习过函数指针,不过在工作中用过才能体会更深。

先说一下应用背景,个人觉得这个十分重要,因为只有在特定的场景下使用某个技能,且能很好的解决问题,才能体会这个技能的精华之处。

首先,我们使用C语言做开发,需要开发对球机的控制功能(比如,上下左右转动),且相机的品牌有多种(比如海康,大华)。因此,对于每种相机,每个控制指令都不一样,都需要开发一份控制,比如(camera_hiki_turn_right(...)函数,camera_dahua_turn_right(...)函数),然后系统内部就需要根据不同的相机调用不同的接口,这样一来,每增加一种相机类型,系统内部在调用控制指令的地方都需要增加一种调用方法。  那如何解决这个问题呢?   能不能在增加一种相机的时候,我的系统内部调用不做修改呢?或者只修改某个地方呢?  于是,这里就用到函数指针了-------统一内部调用接口!!!!


大致流程如下: 我先在系统内部定义一个函数指针(比如:_camera_ctrl_turn_right(...))。然后在开始的时候,根据相机不同的类型,将对应相机的该控制函数地址传递给函数指针(比如:_camera_ctrl_turn_right = camera_dahua_turn_right,或者_camera_ctrl_turn_right = camera_hiki_turn_right )。如此一来,在我的系统内部始终调用的是_camera_ctrl_turn_right,如果新增一种相机类型,只需要在开始的时候,把新增类型相机的控制函数传给对应的函数指针。这样就实现了内部的调用接口统一!

 

int capture_hiki_camera_right(unsigned int speed, double time) {
    
    printf("*******海康**********\n");
    return 0;

}

int capture_dahua_camera_right(unsigned int speed, double time) {
    
    printf("*********大华********\n");
    return 0;
}

struct Demo_item{

    int(* _turn_right)(unsigned int , double);
}



void demo()
{
    struct Demo_item* pItem = (struct Demo_item*)malloc(sizeof(struct Demo_item));
    
    unsigned int camera_type = 1;                       //相机类型

    if(camera_type == 1)
        pItem->_turn_right = (int (*)(unsigned int,double))capture_hiki_camera_right;  //将函数名(函数地址)赋值给函数指针
    else
        pItem->_turn_right = capture_dahua_camera_right;   
    
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值