返回第五十二章 指针(七)(1 / 2)程序媛养成计划首页

「行了行了,老爹你也不用做铺垫了,咱们开门见山直接说吧!大家都这么熟的人了,你这背后的套路早就我们看穿了。」

还不等老爹说完,我便挥手打断了他。

「……」

老爹是一阵语塞,满脸的无奈。

「这个时候,我们就可以使用typede这个喜欢取名字的家伙来定义函数指针类型。注意到,这里是定义的一种数据类型,这意味着我们可以使用这种类型来声明很多的变量,所以刚刚提到的问题也就迎刃而解了。具体的使用方法如下:

typede int(*Func)(int,int);

int max(int a,int b)

{

return a > b ? a : b;

}

int min(int a, int b)

{

return a < b ? a : b;

}

int main(int argc, char const* argv[])

{

Func max = max;

Func min = min;

int maxValue = max(3, 4);

int minValue = min(3, 4);

}

看到没,因为使用了typede,这个时候Func已经不是某个具体的指针变量了,而是摇身一变,升级成为了开山鼻祖。

这样一来,Func就成了一种函数指针类型,可以用来声明变量,所有返回值为int,有两个int参数的函数都可以赋值给它的变量。

到这里,指针和函数之间那些不可告人的关系就被我们全部摸透了。」

「可是老爹,你说了这么多,我也没有明白函数指针有什么用啊,如果我们要调用一个函数,直接用方法名调用不好么,何必这么麻烦?」

我不解道。

「嗯,之前我跟你们说了,其实函数指针最大的用处是作为参数传递给另外一个函数,这种就做回调机制,而作为参数传递的函数指针就被称之为回调函数。

现在我们就用一个贴近生活的小案例来说明回调函数。

假设我们住这个小区是非常高档的小区,甚至都和国际接轨了,里面除了中国人以外还居住了很多外国友人。

物业为了提高服务水品,于是要求保安叔叔们在小区门口和每一个进来小区的业主敬礼问好。

那现在问题就来了,敬礼还好,不管是中国人还是外国人都能够看懂。但是问好因为语言的差异性,会存在问题。如果说的话,大部分外国人听不懂,但是如果说英语的话,大部分中国人也听不懂。

于是啊,有个聪明的保安想出了一种让人拍案叫绝的办法,让进出的人自己选择问好的方式,这样一来,中国人问好用汉语,外国人问好用英语。

呐,上面的场景就可以用回调函数来实现:

typede void (*Func)(void);

void chineseSayHello(void)

{

print(“欢迎回家“);

}

void othersSayHello(void)

{

print(“welee go back home“);

}

void sayHello(Func sayHello)