电子说
第二章为程序设计技术,本文为2.1.4 函数指针数组。
>>>> 2.1.4 函数指针数组
如果要实现一个袖珍式计算器,假设程序的其它部分已经读入2个数op1和op2,以及一个操作符oper,可以使用下面的代码对操作符进行测试,然后决定调用哪个函数。比如:
显然,对于一个具有上百个操作符的计算器来说,这条switch语句将会之很长。且为了使用switch语句,则表示操作符的代码必须是整数。如果它们是从0开始的连续整数,则可以使用转移表实现相同的任务,而转移表就是一个函数指针数组,该数组的每个元素是一个函数的地址。如果有以下声明:
其中,PF是一个指向返回值为double的函数的指针类型,该函数有两个double类型参数。假设需要声明一个包含4个元素的数组变量oper_func,用于存储4个函数的地址。即可使用PF定义一个存储函数指针的数组:
其中,oper_func为指向函数的指针的数组,上述声明与以下声明:
虽然形式不一样,但其意义完全相同。
如果给函数指针数组变量中的元素赋值,则与普通数组元素相同。比如:
在上述表达式中,除了等号右侧是函数名之外,这是一个正常的数组元素,因此,同样可以在定义中初始化指针数组变量的所有元素。创建一个转移表,需要声明并初始化一个函数指针数组,但一定要确保这些函数的原型出现在这个数组的声明之前。比如:
该语句初始化了4个元素,因此不再需要执行初始化的赋值语句。注意,初始化列表中各个函数名的正确顺序取决于程序中用于表示每个操作符的整型代码,这个示例中的ADD、SUB、MUL和DIV分别对应0、1、2、3.。其调用形式如下:
即oper从数组中选择正确的函数指针,函数调用操作符执行这个函数。当然,也可以去掉数组的大小,由初始化列表确定数组的大小。比如:
其中,大括号内的初始值个数确定了数组中元素的数目,因此函数指针数组的初始化列表与其它数组的初始化列表的作用一样。
在公众号后台回复关键字【编程】,即可在线阅读《面向AMetal框架与接口的编程(上)》和《程序设计与数据结构》两本书。
《面向AMetal框架与接口的编程(上)》书籍还在印刷中,具体开售时间另行通知。《程序设计与数据结构》书籍的淘宝购买链接如下,可复制到浏览器打开:
https://s.click.taobao.com/d3WStbw
公众号介绍
致远电子官方微信公众号,一个汇聚500名工程师的研发测试分享平台,为您提供电子行业领先的产品技术与解决方案。
全部0条评论
快来发表一下你的评论吧 !