马上研三,面临着找工作,心血来潮,在学堂在线网站上复习C++语法课,希望把以前没搞懂的一些知识点弄懂了。
以后可能会陆续更新一些难啃点的使用理解。
函数指针:
定义:函数指针指向存放代码段的首地址;
定义形式:存储类型 返回值类型 (*函数指针名) ();
值得注意的与指针类型的函数的区别:
指针类型的函数:函数返回值是指针。定义形式:存储类型 返回值类型 * 函数指针名();
重点(敲黑板):
典型用途:实现函数回调。
理解:
A、通过函数指针调用函数。将函数的指针作为参数传递给一个函数,使得在处理相似的事件的时候可以灵活的使用不同的方法;
B、调用者不关心谁是调用者。即需要知道存在一个具有特定原型和限制条件的被调用函数。(个人感觉,这一条是最实用的)
具体怎么来理解函数指针的用途呢?这里就必须要贴上案例了。
问题描述:编写一个计算函数compute,对两个整数进行各种计算。要求:
1)有一个形参为指向具体算法函数的指针,根据不同的实参函数,用不同的算法进行计算。
2)编写三个函数:求两个整数的最大值、最小值、和。分别用这三个函数作为实参,测试compute函数
代码:
#include <iostream>
using namespace std;
int compute(int a, int b, int (*func) (int , int))
{ return func(a,b); }
int max (int a, int b) //计算最大值
{ return ( (a>b)? a: b); }
int min( int a, int b) //计算最小值
{ return a<b? a: b; }
int sum(int a, int b) //计算和
{ return a+b;}
int main()
{
int a, b, res;
cout<<“请输入整数a:”; cin>>a;
cout<<"请输入整数b: "; cin>>b;
res=compute(a, b, &max); //计算两者较大值
res=compute(a, b, &min); //计算两者较小值
res=compute(a, b, &sum); //计算两者之和
}
这个例子很好的说明了函数指针实现函数回调的使用,包括函数指针作为形参的定义、包含函数指针的函数的调用。值得认真体会。
从这个例子也可以看出函数指针还是挺有用的,可以让代码逻辑更清楚、有条理。但是也有一点问题,增加了函数调用,增加了程序调试时间。