函数指针
/* test01-函数指针和回调函数复习
1. 声明普通指针时,必须提供指针的类型。
同样,声明函数指针时,也必须提供函数类型,
函数的类型是指返回值和参数列表(函数名和形参名不是)
2. C++中,函数名就是函数的地址
test02-回调函数的使用场景总结:
1. 用函数指针回调函数和用函数名调用函数的意义不同
2. 回调函数是把一个函数的代码嵌入到另一个函数中
调用者函数提供了主体的流程和框架,具体功能由回调函数完成
3. 在写回调函数时只关心种类,不关心具体功能
test03-如何给回调函数传递参数?
1. 一种是有调用者提供实参
2. 另一种把实参从外面传进去
*/
//test01-初识函数指针
#include <iostream>
using namespace std;
void func(int no,string str)
{
cout<<"小小的"<<no<<"号:"<<str<<endl;
}
int main()
{
int bh=3;
string message="我是一只小草龟。";
func(bh,message);
void(*pfunc)(int,string); //声明表白函数的函数指针
pfunc=func; //对函数指针赋值,语法:函数指针名=函数名
pfunc(bh,message); //C++写法 用函数指针名来调用函数,语法是:函数指针名(实参)
(*pfunc)(bh,message); //C语言写法 用函数指针名来调用函数
}
#endif
//test02-函数指针的作用
#if 0
#include <iostream>
using namespace std;
void zs() //张三的个性化表白函数 //返回值和参数类型一定相同
{
cout<<"翻三个跟斗。\n"; //个性化表白的代码
}
void ls() //李四的个性化表白函数 //返回值和参数类型一定相同
{
cout<<"我由一只小草龟。\n"; //个性化表白的代码
}
//在表白神器里面,用函数指针就可以调用个性化表白函数。
//这种调用就叫函数的回调。 (个性化表白函数就是回调函数)
void show(void(*pf)())
{
cout<<"表白之前工作已完成。\n"; //表白之前准备工作
pf(); //个性化表白函数指针p();
cout<<"表白之后工作已完成。\n"; //表白之后的收尾工作
}
int main()
{
//show(zs); //把张三的函数名作为参数传递给表白神器函数
show(ls);
cout<<"hhhhhh"<<endl;
}
#endif
//test03-给回调函数传递参数
#if 0
#include <iostream>
using namespace std;
//给回调函数增加一个形参
void zs(int a)
{
cout<<"a="<< a <<"翻三个跟斗。\n"; //个性化表白的代码
}
void ls(int a)
{
cout<<"a="<< a <<"我是一只小草龟。\n"; //个性化表白的代码
}
//在表白神器里面,用函数指针就可以调用个性化表白函数。
//这种调用就叫函数的回调。 (个性化表白函数就是回调函数)
//void show(void(*pf)(int)) //1) 由调用者提供实参(写数据类型就可以了)
void show(void(*pf)(int),int b) //2) 把实参从外面传进去
{
cout<<"表白之前工作已完成。\n"; //表白之前准备工作
//int b=3; //1)
pf(b); //1) 用函数指针调用回调函数时,把实参传入回调函数
cout<<"表白之后工作已完成。\n"; //表白之后的收尾工作
}
int main()
{
//show(zs); //把张三的函数名作为参数传递给表白神器函数
//show(ls); //1)
show(ls,3); //2)
show(zs,4); //2)
cout<<"hhhhhh"<<endl;
}