函数指针
函数的二进制代码存放在内存四区中的代码段,函数的地址是它在内存中的起始地址。如果把函数的地址作为参数传递给函数,就可以在函数中灵活的调用其它函数。
使用函数指针的三个步骤:
a)声明函数指针;
b)让函数指针指向函数的地址;
c)通过函数指针调用函数。
1)声明函数指针
声明普通指针时,必须提供指针的类型。同样,声明函数指针时,也必须提供函数类型,函数的类型是指返回值和参数列表(函数名和形参名不是)
假设函数的原型是:
int func1(int bh,string str);
则函数指针的声明是:
int (*pfa)(int,string);
pfa是函数指针名,必须用括号,否则就成了返回指针的函数。
2)函数指针的赋值
函数名就是函数的地址。
函数指针的赋值:函数指针名=函数名;
3)函数指针的调用
(*函数指针名)(实参);
函数指针名(实参);
#include<iostream> using namespace std; void func(string str) { cout<<"函数指针示例"<<endl; } int main(){ string message = "调用函数指针的信息"; func(message); //普通调用 void (*func)(string); //声明函数指针 pfunc = func; //对函数指针赋值,语法是函数指针名 = 函数名。 pfunc(message); //用函数指针名调用函数。C++ (*pfunc)(message); //用函数指针名调用函数。C语言。 }
回调函数是把一个函数的代码嵌入到另外一个函数中,调用函数提供了·主体的流程和框架,具体功能由回调函数来完成。在写调用函数时,只要确定回调函数的种类,不关心回调函数的功能。
如何让给回调函数传参:
由调用函数提供实参
把实参从外面传进去
#include<iostream> using namespace std; void print(string str) //回调函数 { cout << "str = " << str << endl; } void show(void (*pf)(string), int b) { string str = "hhhhh"; //通过回调函数传参 pf(str); } int main() { //show(print); show(print, 5); return 0; }