如何创建函数指针

假如想要创建指针变量,用来保存上一页中函数的地址,必须像这样做:

如何创建函数指针 - 图1

看起来很复杂,对吗?

但就得那么复杂,因为需要把函数的返回类型和接收参数类型告诉C编译器。一旦声明了函数指针变量,就可以像其他变量一样使用它,可以对它赋值,也可以把它加到数组中,还可以把它传给函数……

……回去看看find()的代码……

这里没有蠢问题

问:char**是什么意思?是不是打错了?

char**是一个指针,通常用来指向字符串数组。

 

如何创建函数指针 - 图2练习

看看其他人想要找的男生类型,你能否为每类搜索创建函数?第一个已经写好。

如何创建函数指针 - 图3

 

如何创建函数指针 - 图4练习解答

你将看到其他人想找什么类型的男生,并为每类搜索创建函数。

如何创建函数指针 - 图5

如何创建函数指针 - 图6试驾

把你写的这些函数拉出来溜溜,看看它们是怎么工作的。

你需要创建一个程序,依次把函数传给find()

如何创建函数指针 - 图7

find()函数每次都搜索了不同的内容。有了函数指针,就能把函数传给函数,用更少的代码创建功能更强大的程序,这就是为什么说函数指针是C语言最强大的特性之一。

如何创建函数指针 - 图8函数指针狩猎指南

当你身处芦苇丛中,识别函数指针就变得异常困难,下面这个狩猎指南简单易懂,便于携带,而且刚好可以装进C程序员的弹夹包。

如何创建函数指针 - 图9

 

这里没有蠢问题

问:如果函数指针是指针,为什么调用函数时不需要在它们前面加*

:可加也可不加,可以把代码中的match(ADS[i])换成(*match)(ADS[i])

问:我可以用&取得函数的地址吗?

:当然,除了find(sports_or_workout),还可以写find(&sports_or_workout)

问:那为什么不这么写?

:即使省略*&,C编译器也能识别它们,这样代码更好读。