函数指针

函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。他存储函数代码的起始地址,就如变量指针,存储变量的起始地址。
函数指针可以像一般函数一样,用于调用函数、传递参数。
https://www.runoob.com/w3cnote/cpp-func-pointer.html

函数指针变量的声明:

  1. //存储类型 数据类型 (*函数指针名)();
  2. data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
  3. //例如:
  4. int (*fp)(int a);
  5. // 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,
  6. 函数返回值是 int 类型的指针 fp

函数指针的典型用途——实现函数回调

  • 通过函数指针调用的函数
    • 例如将函数的指针作为参数传递给一个函数,使得在处理相似事件的时候可以灵活的使用不同的方法。
  • 调用者不关心谁是被调用者
    • 需知道存在一个具有特定原型和限制条件的被调用函数。

      实例代码

      ```cpp

      include

using namespace std;

int compute(int a, int b, int(*func)(int, int))

{ return func(a, b);}

int max(int a, int b) // 求最大值

{ return ((a > b) ? a: b);}

int min(int a, int b) // 求最小值

{ return ((a < b) ? a: b);}

int sum(int a, int b) // 求和

{ return a + b;}

int main()

{

int a, b, res;

cout << “请输入整数a:”; cin >> a;

cout << “请输入整数b:”; cin >> b;

res = compute(a, b, & max);

cout << “Max of “ << a << “ and “ << b << “ is “ << res << endl;

res = compute(a, b, & min);

cout << “Min of “ << a << “ and “ << b << “ is “ << res << endl;

res = compute(a, b, & sum);

cout << “Sum of “ << a << “ and “ << b << “ is “ << res << endl;

}

  1. <a name="RW5pE"></a>
  2. ## typedef关键和指针函数
  3. typedef 定义可以简化函数指针的定义
  4. ```csharp
  5. int test(int a)
  6. {
  7. return a;
  8. }
  9. int main()
  10. {
  11. typedef int (*fp)(int a);
  12. fp f = test;
  13. cout<<f(2)<<endl;
  14. return 0;
  15. }

函数指针数组

利用函数指针,我们可以构成函数指针数组,更明确点的说法是构成指向函数的指针数组。

  1. void t1(){cout<<"test1"<<endl;}
  2. void t2(){cout<<"test2"<<endl;}
  3. void t3(){cout<<"test3"<<endl;}
  4. int main(int argc, const char * argv[])
  5. {
  6. typedef void (*fp)(void);
  7. fp b[] = {t1,t2,t3}; // b[] 为一个指向函数的指针数组
  8. b[0](); // 利用指向函数的指针数组进行下标操作就可以进行函数的间接调用了
  9. return 0;
  10. }