当前位置: 首页 > news >正文

​​​​​​​​​​​​​​如何使用函数指针来调用函数

在C和C++编程中,函数指针是一种特殊类型的指针,它指向一个函数而不是一个变量。使用函数指针可以动态地调用不同的函数,这在实现回调函数、事件处理、策略模式等场景中非常有用。

以下是如何定义和使用函数指针来调用函数的步骤:

  1. 定义函数指针类型
    首先,你需要定义一个函数指针类型。这个类型描述了指针所指向的函数的返回类型和参数列表。

     

    c复制代码

    typedef int (*FuncPtr)(int, int); // 定义一个指向返回int类型,接受两个int参数的函数的指针类型

    或者,你也可以在声明函数指针时直接指定类型,而不使用typedef

     

    c复制代码

    int (*func_ptr)(int, int); // 直接声明一个函数指针
  2. 定义与函数指针类型匹配的函数
    接下来,你需要定义一些与你的函数指针类型匹配的函数。

     

    c复制代码

    int add(int a, int b) {
    return a + b;
    }
    int subtract(int a, int b) {
    return a - b;
    }
  3. 将函数地址赋值给函数指针
    现在,你可以将函数的地址赋值给你的函数指针。

     

    c复制代码

    FuncPtr ptr_add = add;
    FuncPtr ptr_subtract = subtract;

    或者使用直接声明的函数指针:

     

    c复制代码

    func_ptr = add; // 将add函数的地址赋给func_ptr
  4. 通过函数指针调用函数
    最后,你可以通过你的函数指针来调用函数。

     

    c复制代码

    int result_add = ptr_add(5, 3); // 调用add函数,并传递参数5和3
    int result_subtract = ptr_subtract(5, 3); // 调用subtract函数,并传递参数5和3
    printf("Add: %d, Subtract: %d\n", result_add, result_subtract);

完整示例:

 

c复制代码

#include <stdio.h>
// 定义函数指针类型
typedef int (*FuncPtr)(int, int);
// 定义与函数指针类型匹配的函数
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
// 将函数地址赋值给函数指针
FuncPtr ptr_add = add;
FuncPtr ptr_subtract = subtract;
// 通过函数指针调用函数
int result_add = ptr_add(5, 3);
int result_subtract = ptr_subtract(5, 3);
printf("Add: %d, Subtract: %d\n", result_add, result_subtract);
return 0;
}

在这个示例中,FuncPtr是一个指向返回int类型并接受两个int参数的函数的指针类型。我们定义了两个这样的函数:addsubtract,并将它们的地址分别赋给了ptr_addptr_subtract函数指针。然后,我们通过这些函数指针调用了相应的函数,并打印了结果。

相关文章:

  • MySql数据库运维学习笔记
  • c语言socket()函数的概念和使用案例
  • 常用设计模式(embeded Qt)
  • 主流虚拟化技术讲解
  • 用Python实现的双向链表类,包含了头插、尾插、归并排序等功能
  • 再探动态规划--背包问题
  • 听懂 弦外之音
  • C++算法基础笔记
  • C++STL容器之set
  • IEEE 会议论文作者信息Latex模板
  • 【Bluedroid】AVRCP 连接源码分析(一)
  • VUE四:Vue-cli
  • flink系列之:使用flink cdc3从mysql数据库同步数据到doris和starrocks
  • QEMU源码全解析 —— 内存虚拟化(17)
  • 计算机网络-面试总结
  • 常用高压缩率的视频容器格式,并进行大比例压缩
  • Windows 上源码安装 FastGPT
  • S7-1200如何利用时钟存储器做震荡电路
  • QQ登录测试用例报告
  • 大模型SFT有监督微调教程
  • 外交部发言人就澳大利亚联邦大选结果答记者问
  • 五一假期旅游大市党政领导靠前调度,重视解决游客反映的问题
  • 徐丹任武汉大学药学院院长:研究领域在国际上处领跑地位
  • 韩代总统李周浩履职
  • 今年五一假期出游人群规模预计比去年提升8%,哪里最热门?
  • 五大国货美妆去年业绩分化:珀莱雅百亿营收领跑,上海家化转亏