函数指针:

  • 定义:将定义好的原型函数,赋给函数指针,将指针作为参数传给其他函数,完成单一函数内通过函数指针调用不同函数,实现不同动作的效果
  • 主要用途:
    • 转移表
    • 作为函数参数
  • 代码实现: ```c /**
  • 基本定义 */

int add(int, int); // 原型 prototype,即函数的声明 int sub(int, int);

int (oper_func)(int, int); // 定义函数指针 // 返回类型 (函数指针名)(函数原型形参表)

int (*oper_func)(int, int) = add; // 定义时赋值

int (*oper_func)(int, int); // 可以定义后再赋值 oper_func = &add; // 这里加&和不加&,效果相同, // 编译阶段编译器是将函数名转为函数指针操作,加&是为了给人看

/**

  • 使用 */ int res = oper_func(1, 2); ```

转移表

  • 定义:一个用于简化代码的函数指针数组
  • 使用背景:
    • 实现一个简单计算器,需要多个函数配合,比如add、sub、mul、div等,如果写入switch函数中依旧很麻烦,代码冗长,使用一个函数指针数组解决,则可以简化为一句话
  • 代码实现: ```c // 假设已预先定义好函数原型

int (*oper_func_arr[])(int, int) = { add, sub, div, mul
};

int (*funcs[6])();

// 调用 int res = oper_func_arroper; ```

  • 注意事项:
    • 数组越界的问题在这里也会存在,调试起来颇为麻烦,所以要小心行事,将转移表的下标保证位于合法范围内

2020/6/16 1.5h