在C/C++中,有一个很有意思的语法结构——函数指针,还有一个与之类似的概念——指针函数。
在语法结构上,函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,函数指针可以用来指向一个函数。
举例说明:
指针函数大多这样定义int *fun(int x,int y);他返回的是一个指向整型数据的地址指针,其值是指针;
函数指针大多这样定义int (*fun)(int x, int y);他一般表示为指向数组的首地址,或者是指向函数代码的首地址,指向函数代码首地址的指针变量。
注意:()的优先级要比*高。
比如有一个分割字符串的函数strtok_s,函数原型如下:
他的返回值就是一个指向分割后的字符串char*的地址。
而在STL中,有一个算法sort,函数原型如下:
其中的_Pr _Pred就是一个_Pr类型的类对象或是函数指针。
其实,函数指针就相当于C#中委托的概念,但却有本质上的区别,这里不做详细讨论。
函数指针最大的优点是调用中具有相同的入口,可以有不同的实现。比如说上面的sort算法,在传入不同的函数体_Pred的时候,你可以传入升序的方法,也可以传入降序的方法,但只需编写一个函数sort就可以实现两个功能(甚至多个,和你的传入_Pred有关,比如你可以让一个整数向量中偶数升序,奇数降序排序)。好处显而易见,STL中的很多算法都是如此实现。
我们也可以如此使用,下面举例:
应当注意的是,如果想在类中实现,函数体要么设为全局函数,要么设为静态函数。因为,函数指针指向的是一块代码区,地址是不属于任何一个对象的。
上面的代码中,A::myFun和B::MyFunB都是不同的类中的函数实现,一个入口,多种实现!
函数指针
最新推荐文章于 2024-02-26 00:30:36 发布