可能在学校的学习中我们很少使用到函数指针,使用到的地方可能就是在api函数传递回调函数的地方使用到了,不是很熟悉,学习总结下
1.定义:
指向某种函数类型的指针(函数类型由返回值和形参确定)
2.格式:
函数返回类型 (*函数指针名) (形参列表);
例如:
int (*pMax)(int a,int b);
3.赋值:
1>直接赋值:
int Max(int a, int b);
int (*pMax)(int a, int b);
pMax = Max;
2>取值赋值:
int Max(int a, int b);
int (*pMax)(int a, int b);
pMax = &Max;
4.调用
1>直接调用
int Max(int a, int b);
int (*pMax)(int a, int b);
void main()
{
pMax = &Max;
int c = pMax(5, 4);
cout<<c<<endl;
}
2>用解应用操作符:(解引用操作符与函数指针名必须用括号框起来)
int Max(int a, int b);
int (*pMax)(int a, int b);
void main()
{
pMax = &Max;
int c = (*pMax)(5, 4);//注意此处解引用操作符与函数指针名必须用括号括起
cout<<c<<endl;
}
5.函数指针做形参:
格式:
返回值 函数名(参数1,参数2,..,函数返回值 (*函数指针名)(参数列表));
bool ChangIf(int &a, int &b, int (*pMax)(int a, int b));
6.返回函数指针:
看返回值为函数指针的函数声明估计要郁闷死,但是如果我们掌握技巧并且足够细心,那么看懂不是问题
写或者读返回函数指针的函数声明应该是由内而外
举个例子吧:写一个返回值类型为max函数类型指针的函数
1>写函数名,函数参数表
Test()
2>在函数名前加*,并用括号将现在写好的内容括起来(这里的括号是必须的)
(*Test())
3>在括号前面写函数指针返回类型,在括号后面写函数指针参数表
int (*Test())(int a, int b);
注:
1>用typedef先定义函数指针或者函数别名,再将这个名字用来做参数或者返回值,或者定义指针变量这样显得易懂些, 可以提高程序的可读性
2>用typedef定义函数别名,在写函数定义时这个名字可以直接用来做函数的参数,但是这个名字不能直接用来做函数返回值