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

C语言的函数指针

介绍+案例

什么是函数指针?

函数指针 是指向函数的指针变量,它可以用来间接调用函数。在 C/C++ 中,函数指针允许程序在运行时选择调用不同的函数,这使得代码更加灵活和动态。函数指针广泛应用于回调函数、事件处理、动态选择算法等场景。

函数指针的声明

函数指针的声明语法如下:

return_type (*pointer_name)(parameter_type1, parameter_type2, ...);
  • return_type 是函数返回值的类型。
  • pointer_name 是指针变量的名字。
  • parameter_type1, parameter_type2, ... 是函数的参数类型。
  • * 表示这是一个指针,指向一个函数。

例子:简单的函数指针

以下是一个简单的函数指针例子,演示了如何声明和使用函数指针:

1. 使用函数指针调用函数
#include <iostream>
using namespace std;

// 定义两个简单的函数
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    // 定义一个函数指针,指向接受两个int参数并返回int的函数
    int (*operation)(int, int);

    // 将函数指针指向add函数
    operation = add;
    cout << "10 + 5 = " << operation(10, 5) << endl; // 调用add函数

    // 将函数指针指向subtract函数
    operation = subtract;
    cout << "10 - 5 = " << operation(10, 5) << endl; // 调用subtract函数

    return 0;
}

输出:

10 + 5 = 15
10 - 5 = 5
解释:
  1. 我们定义了两个函数 add 和 subtract,它们都有相同的函数签名:int(int, int)
  2. 在 main 函数中,我们声明了一个函数指针 operation,它指向一个接受两个 int 参数并返回 int 的函数。
  3. 我们先将 operation 指向 add 函数,然后调用 operation(10, 5),实际上就是调用了 add(10, 5)
  4. 接着,我们将 operation 指向 subtract 函数,再次调用 operation(10, 5),这时实际上是调用了 subtract(10, 5)

例子:使用函数指针作为参数

函数指针常用来实现回调函数,允许你将一个函数作为参数传递给另一个函数。

#include <iostream>
using namespace std;

// 一个简单的函数,接受一个整数并打印
void printNumber(int n) {
    cout << "Number: " << n << endl;
}

// 接受一个函数指针作为参数,并调用它
void callFunction(void (*func)(int), int value) {
    func(value);  // 调用函数指针所指向的函数
}

int main() {
    // 将printNumber作为回调函数传递
    callFunction(printNumber, 42);
    return 0;
}

输出:

Number: 42
解释:
  1. callFunction 函数接受一个函数指针和一个整数作为参数。
  2. 在 main 函数中,我们将 printNumber 函数的地址作为参数传递给 callFunction
  3. callFunction 调用传递给它的函数指针,并输出结果。

例子:函数指针数组

有时你可能希望有一个函数指针数组,来存储多个函数的指针,从而可以根据索引选择不同的函数。

#include <iostream>
using namespace std;

// 定义多个简单的函数
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int multiply(int a, int b) {
    return a * b;
}

int divide(int a, int b) {
    return a / b;
}

int main() {
    // 定义一个函数指针数组,指向接受两个int参数并返回int的函数
    int (*operations[])(int, int) = { add, subtract, multiply, divide };

    int a = 10, b = 5;

    // 通过数组索引调用不同的函数
    cout << "Addition: " << operations[0](a, b) << endl;
    cout << "Subtraction: " << operations[1](a, b) << endl;
    cout << "Multiplication: " << operations[2](a, b) << endl;
    cout << "Division: " << operations[3](a, b) << endl;

    return 0;
}

输出:

Addition: 15
Subtraction: 5
Multiplication: 50
Division: 2
解释:
  1. 我们定义了一个包含多个函数指针的数组 operations,每个元素都指向一个接受两个 int 参数并返回 int 的函数。
  2. 通过索引,我们可以调用不同的函数,如 operations[0](a, b) 调用的是 add(a, b)operations[1](a, b) 调用的是 subtract(a, b)

使用函数指针的优点

  • 灵活性和可扩展性:使用函数指针,可以在运行时选择调用哪个函数,这对于事件驱动程序、回调机制等非常重要。
  • 回调机制:函数指针常用于回调函数(如 C 标准库的 qsort 或操作系统的事件处理)。
  • 动态行为:通过函数指针,可以实现更加灵活的代码结构,如插件系统、策略模式等。

总结

函数指针是 C/C++ 中强大的工具,可以使程序更加灵活和动态。通过函数指针,我们可以间接调用函数、实现回调机制、甚至动态选择函数等。理解函数指针的概念及其用法是掌握 C/C++ 编程的一个重要步骤。


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

相关文章:

  • PCL点云库入门——PCL库中点云数据拓扑关系之K-D树(KDtree)
  • OpenSSL 心脏滴血漏洞(CVE-2014-0160)
  • CarWatchdog
  • unity 最小后监听键盘输入
  • git 删除鉴权缓存及账号信息
  • OpenCV相机标定与3D重建(23)用于在图像上绘制世界坐标系的三条轴函数drawFrameAxes()的使用
  • linux-----文件命令
  • Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
  • AdminJS - 集成 MySQL 的现代化管理面板开发指南
  • CSS3 实现火焰-小火苗效果
  • linux中大内核锁、互斥锁、信号量、完成变量、自旋锁区别
  • 【AIGC-ChatGPT进阶提示词-《动图生成》】怪物工厂:融合想象力与创造力的奇幻世界
  • vscode 使用说明
  • 四川托普信息技术职业学院教案1
  • 智能挂号系统设计典范:SSM 结合 Vue 在医院的应用实现
  • Windows下安装Rabbit MQ
  • 【线性代数】理解矩阵乘法的意义(点乘)
  • 安装Mac软件遇到问题常见报错
  • 机器学习-逻辑回归和softmax回归
  • go语言zero框架中启动脚本.sh的编写与配置
  • go语言 爬虫 钉钉群机器人
  • 玩游戏没有flash插件的解决方案(No Flash)
  • 【RAII | 设计模式】C++智能指针,内存管理与设计模式
  • 音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
  • python学习笔记—9—复习
  • 详细介绍如何使用rapidjson读取json文件