打印
[应用相关]

在结构体里放函数

[复制链接]
724|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mintspring|  楼主 | 2024-3-28 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
结构体里可以包含函数指针。这种情况通常用于实现类似于面向对象编程语言中的方法(method)或者回调函数(callback)的功能。通过将函数指针作为结构体的成员,可以在结构体中存储函数的地址,从而实现对函数的引用。
#include <stdio.h>

// 定义一个结构体
struct Calculator {
    // 函数指针成员
    int (*add)(int, int);
    int (*subtract)(int, int);
};

// 加法函数
int add(int a, int b) {
    return a + b;
}

// 减法函数
int subtract(int a, int b) {
    return a - b;
}

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

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

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

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

    return 0;
}


使用特权

评论回复
沙发
mintspring|  楼主 | 2024-3-28 15:47 | 只看该作者
Calculator 结构体包含两个函数指针成员 add 和 subtract。然后,我们定义了 add 和 subtract 两个函数,并在 main 函数中将这两个函数的地址分配给了结构体中相应的函数指针成员。最后,我们通过结构体中的函数指针调用了这两个函数,并输出了结果。

使用特权

评论回复
板凳
yiy| | 2024-3-28 21:12 | 只看该作者
这个用法真棒啊,有点面向对象的感觉。

使用特权

评论回复
地板
yiy| | 2024-3-28 21:13 | 只看该作者
跟面向对象比,是针对的实体函数,而不是创建对象生成的函数。

使用特权

评论回复
5
zwsam| | 2024-3-28 22:15 | 只看该作者
不错

使用特权

评论回复
6
4c1l| | 2024-8-31 22:25 | 只看该作者
通过这种方式,可以模拟类似于面向对象编程(OOP)中的方法,或者实现回调函数的功能。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

296

主题

4893

帖子

24

粉丝