周立功教你学C语言编程与程序设计:这样写函数指针数组最好用

电子说

1.3w人已加入

描述

第二章为程序设计技术,本文为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

 

延伸阅读

周立功:做好软件模块的分层设计必须掌握的回调函数

 

周立功:动态分布内存——free()函数与realloc()函数

 

周立功:动态分布内存——malloc()函数与calloc()函数

 

周立功:用数组,构造一个双重指针

 

周立功:你知道数组也能保存指针吗?

 

周立功:字符真正价值在于形成字符序列——字符串函数

 

周立功:字符真正价值在于形成字符序列——字符串的输入输出

 

周立功:字符真正价值在于形成字符序列——字符串的引用

 

周立功:字符能像整数一样计算

 

周立功:如何将二维数组作为函数参数传递

 

周立功:算法的泛化问题,你应该知道

 

周立功:泛型编程——实现代码复用

 

周立功:数组访问的四大方法与惯用法

 

周立功:数组的规定,你知道吗?

 

周立功:C语言数组与指针详解

 

周立功:实现和使用易重用的抽象接口

 

周立功:设计良好的程序接口需注意的5个事项

 

周立功:程序设计的新思维和新方法

 

周立功:拆分条件语句让代码更易理解——综合表达式与条件表达式 

 

周立功:拆分条件语句让代码更易理解——逻辑表达式

 

 

公众号介绍

 

 

致远电子官方微信公众号,一个汇聚500名工程师的研发测试分享平台,为您提供电子行业领先的产品技术与解决方案

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分