函数指针是个有趣的东西。就像其他普通的指针一样,函数指针指向的也是一块特定大小内存,但里面装的不是普通的数据,而是函数代码,也就是一段指令。假如你给人家提供了指向这段代码的函数指针,那人家就可以来调用这个函数。这很有用。在GUI系统里面,通常有个概念叫做"callback"。GUI系统自己本身就有能力去显示单独的一条线段,一个矩形,一个椭圆等等,这些东西实际上构成了整个用户界面。那比如,你按一个按钮下去,按照需求,当这个按钮按下去的时候,是要show出一个对话框。在这个对话框的左上角显示一个园,正中间显示一个五边型,然后在最下面显示一条线段。那你就得自己编写一个函数,使用GUI系统所导出来的函数去实现这些画的动作。然后你把你写的函数的指针传递给GUI系统。在GUI系统检测到用户按下这个按钮后,它会去通过函数指针调用你提供给它的这个函数,来实际画出整个对话框,这就叫做
callback。另外一个例子,可能是排序。比方对一系列字符串进行排序的时候,可能会有多个排序标准,如按字符串长度排升序,按字符串的大小排序等等。那实际开发的时候,最好把这一系列排序策略实现成一个个的函数。当然,这些函数都会有同样的函数原型,都是接受一个要排序的字符串数组、一个数字表示数组里面字符传的个数,以及返回一个字符串数组指针指向排序好的结果。通常来说,有了这些排序函数就足够了,用户可以按照自己的需要去选择不同的函数来使用。但实际上,为了简化这套排序接口的设计,除了这些实现不同排序策略的函数外,我们最好还要写一个排序函数,该函数的参数是一个函数指针,以及要排序的字符串数组,当然还有字符串长度和返回用的指针。这个时候用户就可以简单的使用这唯一的排序函数,传之以不同的排序策略函数指针来实现排序了。为了再降低用户的使用负担,在实作的时候,你甚至可以定义一个枚举类型,来表示不同的排序策略,这样用户需要了解的就是各种不同的枚举值,而不是各种各样的排序策略函数了。
函数指针
最新推荐文章于 2025-04-01 01:07:14 发布