目录
1.原理
首先明确:函数指针不用想的太复杂,就是和普通指针一样,比如我们在用普通指针指向一个整型变量时,如下方案例1,就
是将int类型的指针p指向了变量a的地址。
//案例1
int a = 5;
int *p = &a;
我们知道,数组a[10]中,a就代表了数组的首地址,函数也相同,void func()这个函数,func就是此函数的首地址。因此,函数指针就是通过定义一个返回类型和参数类型都与被指向函数相同的指针指向该函数,如下方案例2。
//案例2
void func(int i){
cout << i << endl;
}
int main(){
void (*p)(int) = func;
p(5);
}
2.作用
那么函数指针到底有什么呢?似乎调用过程看起来反倒更麻烦呢。实际上函数指针主要是为了提高函数调用的灵活性,实现面向对象编程的多态性,可看下一章案例。
3.实现方法
bool max(int i , int j); //输出大数
bool min(int i, int j); //输出小数
void show(int i , int j ,bool(*func)(int, int)) { //以函数指针作为参数,极大的提高了灵活性
bool res = func(i, j);
if (res) { cout << i << endl; }
else { cout << j << endl; }
}
int main()
{
show(5, 10, max); //输出10
show(5, 10, min); //输出5
void(*pt)(int, int , bool (*f)(int , int)) = show;
pt(15, 3, min); //输出3
void(*pr)(int, int, bool(*f)(int, int)) = &show;
pr(20, 10, max); //输出20
}
//输出大数
bool max(int i , int j) {
return i > j ? true : false;
}
//输出小数
bool min(int i, int j) {
return i < j ? true : false;
}
根据上述案例,将函数指针作为函数show的参数后,只要是返回值为bool,参数为两个int的函数都可以作为函数show的参数,只需要在调用show时写一下究竟要传入哪个函数(本例中min或max)就可以了,无需多次定义不同的函数来实现不同的功能。