函数指针使用的一点理解

在《程序员成长计划》中,提到的函数指针的运用,今天更明白了一些。分两种情况讨论。(主调函数,被调函数)
第一点,可以传入的函数指针实参。这是平时应用最多的。通过传入的函数指针实现一定的功能,使用一个被调函数,在不需要修改任何代码的情况下,就可以通过传入的函数指针实现多种功能。
这是《程序员成长计划》中最先提到的,着重讲解的,这也是自己最先理解的。
 
第二种,在一个主调函数中,在不改变其代码的情况下,实现多种功能。同样也是使用函数指针。但是由于是主调函数,不可能通过传入的函数形参,传入函数指针的方式。这样为了传入函数指针,就需要调用一个函数,在此函数中给相应的函数指针变量赋值。之后再返回到主调函数中,有主调函数调用这些函数指针,实现功能。
 
不过,同时又想到,这样为何不在主调函数中,调用的那个用来得到函数指针的函数,使用if或者switch在被调函数中实现那些功能,而不用返回主调函数中呢?他们之间又有什么优劣。
 
自己的想法:
使用if/switch:
1、修改时,需要修改两个函数,即主调函数,和它的被调函数。
2、用来实现,选择功能,同时通过switch调用实现函数。实现功能。
 
使用函数指针:
1、函数的调用顺序已经确定,灵活性没有switch好,
2、实现函数的调用,因为函数指针在主调函数中
3、修改起来,只需要修改被调函数中的的东西,(添加需要的函数指针)
 
关于这两种方式,
没有绝对的优劣,关键看程序需要实现的需求是什么。根据需求,选择的合适的方式,这就需要经验。
 
由此想到,
鱼是最后一个看到水的,
很多时候,不是那种方式绝对管用,只有具体问题在使时具体分析,在合适的时候使用合适的方法,要做到不为哪种所困。这样,我们才不会被外界所困,而看不清实质。
这或许就是为什么在《倚天屠龙记》中,张三丰教完张无忌之后,不问其记住多少,而是问其忘记多少——在意不在形。
 
就像《暗时间》所提:
与其:手中有锤,一切都是钉子;
不如:手中有锤,心中无锤。
永不止步步 发表于09-17 14:02 浏览65535次
分享到:

已有1条评论

  • 永不止步步
    永不止步步 09-17 14:03

    我是在结构体数组构成菜单,在解构体里面设置函数指针; 比如我想执行第7项功能,则执行MENUTBL[7].FUNC(X,X,X);就可以了; 进入下一级或返回上一级都很方便; 这是我发现的函数指针最好的一个用途;

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308417个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号