函数指针
指向程序中某一个函数的指针。函数指针可以用来在运行时动态地调用不同的函数,这为编程提供了很大的灵活性。
使用的三步骤:
- 声明函数指针
- 让函数指针指向函数的地址
- 通过函数指针调用函数
声明函数指针
声明函数指针时,必须声明指针具体指向的函数类型,即提供返回值和参数列表.
例如函数原形为:int func (int a, string b);
则函数指针的声明为:int (*pfa)(int, string);
注:pfa是函数指针名,必须用括号,否则就成了返回指针的函数。
函数指针的赋值
函数名就是函数的地址
函数指针的赋值:函数指针名 = 函数名;
函数指针的调用
(*函数指针名)(实参)
——C语言语法
函数指针名(实参)
——C++语法
举例
#include <iostream>
using namespace std;
int func(int a, int b)
{
return a>b?a:b;
}
int main()
{
int a = 10;
int b = 20;
int (*pra)(int, int) = func;
//或者pra=func;
int c=pra(a, b);
cout << c;
}
回调函数
回调函数:回调函数是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用它所指向的函数时,我们就说这是回调函数。回调函数在多线程和网络通信中常用。
#include <iostream>
// 定义一个函数指针类型
typedef void (*Callback)(int);
// 函数原型
void A(int data, Callback callback);
void B(int data);
int main() {
A(10, B); // 调用 A 函数,并将 B 函数作为回调函数传入
return 0;
}
// A 函数接收一个整数和一个回调函数作为参数
void A(int data, Callback callback) {
std::cout << "Function A\n";
// 在A函数中调用回调函数
callback(data);
}
// B 函数接收一个整数作为参数
void B(int data) {
std::cout << "Callback function B, data: " << data << "\n";
}