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

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

在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函数指针。然后,我们通过这些函数指针调用了相应的函数,并打印了结果。


http://www.kler.cn/a/557105.html

相关文章:

  • AI基础:数据可视化简易入门(Matplotlib和Seaborn)
  • DeepSeek-R1之二_基于Open-WebUI的AI托管平台之Pyenv-win安装与配置搭建本地AI知识库
  • 如何自适应计算二值化的阈值
  • 无人机仿真、感知、规划
  • Java值传递,会影响原值的原因
  • Windows使用docker部署fastgpt出现的一些问题
  • Deepseek reasoning-content 透出调研
  • 进程间通信中间件---ZeroMQ
  • HarmonyOS 开发套件 介绍——下篇
  • std::lock_guard、std::unique_lock、std::shared_lock
  • 青少年软件编程(C语言)等级三级考试试题(2)
  • DeepSeek 到底是什么类型的应用,其核心功能是什么?
  • 工业机器人中用于3D碰撞检测的算法库有哪些
  • ubuntu ffmpeg 安装踩坑
  • 【Python项目】基于Django的网站验证码的生成与识别系统
  • 基于Java+SpringBoot+Vue的前后端分离的汽车租赁系统
  • 正则表达式效验邮箱格式, 手机号格式, 密码长度
  • Python 学习之旅:高级阶段(十四)Web 开发框架 Flask
  • 邮件安全之发件人伪造
  • [漏洞篇]文件上传漏洞详解