[应用相关] 在结构体里放函数

[复制链接]
1226|5
 楼主| mintspring 发表于 2024-3-28 15:47 | 显示全部楼层 |阅读模式
结构体里可以包含函数指针。这种情况通常用于实现类似于面向对象编程语言中的方法(method)或者回调函数(callback)的功能。通过将函数指针作为结构体的成员,可以在结构体中存储函数的地址,从而实现对函数的引用。
  1. #include <stdio.h>

  2. // 定义一个结构体
  3. struct Calculator {
  4.     // 函数指针成员
  5.     int (*add)(int, int);
  6.     int (*subtract)(int, int);
  7. };

  8. // 加法函数
  9. int add(int a, int b) {
  10.     return a + b;
  11. }

  12. // 减法函数
  13. int subtract(int a, int b) {
  14.     return a - b;
  15. }

  16. int main() {
  17.     // 创建一个 Calculator 结构体实例
  18.     struct Calculator calc;

  19.     // 将函数指针指向相应的函数
  20.     calc.add = add;
  21.     calc.subtract = subtract;

  22.     // 使用结构体中的函数指针调用函数
  23.     int result_add = calc.add(10, 5);
  24.     int result_subtract = calc.subtract(10, 5);

  25.     printf("Addition result: %d\n", result_add);        // 输出:Addition result: 15
  26.     printf("Subtraction result: %d\n", result_subtract);// 输出:Subtraction result: 5

  27.     return 0;
  28. }


 楼主| mintspring 发表于 2024-3-28 15:47 | 显示全部楼层
Calculator 结构体包含两个函数指针成员 add 和 subtract。然后,我们定义了 add 和 subtract 两个函数,并在 main 函数中将这两个函数的地址分配给了结构体中相应的函数指针成员。最后,我们通过结构体中的函数指针调用了这两个函数,并输出了结果。
yiy 发表于 2024-3-28 21:12 | 显示全部楼层
这个用法真棒啊,有点面向对象的感觉。
yiy 发表于 2024-3-28 21:13 | 显示全部楼层
跟面向对象比,是针对的实体函数,而不是创建对象生成的函数。
zwsam 发表于 2024-3-28 22:15 | 显示全部楼层
4c1l 发表于 2024-8-31 22:25 | 显示全部楼层
通过这种方式,可以模拟类似于面向对象编程(OOP)中的方法,或者实现回调函数的功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

303

主题

4972

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部