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