原创 函数指针使用的一点理解

2013-2-20 20:03 1702 6 15 分类: 消费电子

 

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

文章评论9条评论)

登录后参与讨论

用户568638 2013-3-25 12:44

能举例说明就好了。谢谢!

用户1181267 2013-3-25 10:35

受教了,谢楼主。

用户1601010 2013-3-15 23:13

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

用户620294 2013-3-13 23:10

不错哦

用户1249549 2013-3-13 13:07

HAO

用户1610239 2013-3-13 10:53

没有绝对的优劣,关键看程序需要实现的需求是什么。根据需求,选择的合适的方式,这就需要经验。

用户1610239 2013-3-13 10:18

great!

用户1638380 2013-3-13 08:21

有道理的,能灵活的运用设计才是程序者最高的境界

用户1602177 2013-3-7 14:53

感谢博主分享~
相关推荐阅读
catch2000 2015-07-19 11:44
信号线小电阻的作用
在一块新的PCB上,测试系统能否正常运行的时候,发现系统上电后没有正常启动。  系统框图如下:   在上电的时刻,CPU A(GPIO电平2.6V)会向串口发送启动日志数据,CPU A启动后,...
catch2000 2015-07-05 17:04
协议设计中ACK机制的影响
在TCP/IP中,延时ACK和Nagle算法。  TCP为了同时处理成块数据(通常为512字节的用户数据)和交互数据(通常用户数据比较少,例如不大于10个字节),采用了延时ACK和Nagle算法...
catch2000 2015-05-23 15:48
话说物联网操作系统
最近好多家都宣布推出自己的物联网操作系统。   1. Google将要在Google I/O大会发布的Brillo; 2. 三星推出的Artik芯片搭载Mentor Graphics的...
catch2000 2015-03-31 23:52
不要采用异或来交换两个变量
在进行两个变量的时候,经常会看到有些书误人子弟的推荐使用异或的方式: 方式一 {   x = x ^ y;   y = x ^ y;   x = x ^ y; } 而不是...
catch2000 2014-10-09 07:28
为什么要测试先行
在产品的研发过程中,测试一项至关重要。不论是软件还是硬件。   软件的测试先行,在研发过程中,就做到质量的保证,因为在出现Bug的时候,容易定位Bug,而且即使是在客户端出现Bug,也能够...
catch2000 2014-10-09 07:26
C语言的面向对象编程(一)
一、前言 对于编程而言,重要的是解决问题的方式,而不是语言本身。面向对象与面向过程是解决问题和思考问题的方式。C语言常说是面向过程开发的语言,因为其缺少很多对于面向对象特性的支持。但,这并不影...
我要评论
9
6
关闭 站长推荐上一条 /2 下一条