OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7571|回复: 21

一个C语言函数指针的题,感兴趣的可以看看

[复制链接]

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-12-4
在线时间
717 小时
发表于 2021-3-31 13:34:27 | 显示全部楼层 |阅读模式
本帖最后由 loudianxin 于 2021-6-3 13:53 编辑

#include <stdio.h>
#include <stdlib.h>

/****************************************
* 函数指针结构体
***************************************/
typedef struct _OP {
    float (*p_add)(float, float);
    float (*p_sub)(float, float);
    float (*p_mul)(float, float);
    float (*p_div)(float, float);
} OP;

/****************************************
* 加减乘除函数
***************************************/
float ADD(float a, float b)
{
    return a + b;
}

float SUB(float a, float b)
{
    return a - b;
}

float MUL(float a, float b)
{
    return a * b;
}

float DIV(float a, float b)
{
    return a / b;
}

/****************************************
* 初始化函数指针
***************************************/
void init_op(OP *op)
{
    op->p_add = ADD;
    op->p_sub = SUB;
    op->p_mul = &MUL;
    op->p_div = &DIV;
}

/****************************************
* 库函数
***************************************/
float add_sub_mul_div(float a, float b, float (*op_func)(float, float))
{
    return (*op_func)(a, b);
}

int main(int argc, char *argv[])
{
    OP *op = (OP *)malloc(sizeof(OP));
    init_op(op);

    /* 直接使用函数指针调用函数 */
    printf("ADD = %f, SUB = %f, MUL = %f, DIV = %f\n", (op->p_add)(1.3, 2.2), (*op->p_sub)(1.3, 2.2),
            (op->p_mul)(1.3, 2.2), (*op->p_div)(1.3, 2.2));

    /* 调用回调函数 */
    printf("ADD = %f, SUB = %f, MUL = %f, DIV = %f\n",
            add_sub_mul_div(1.3, 2.2, ADD),
            add_sub_mul_div(1.3, 2.2, SUB),
            add_sub_mul_div(1.3, 2.2, MUL),
            add_sub_mul_div(1.3, 2.2, DIV));
        while(1);
    return 0;
}
游客,如果您要查看本帖隐藏内容请回复

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-12-4
在线时间
717 小时
 楼主| 发表于 2021-3-31 13:43:33 | 显示全部楼层
本帖最后由 loudianxin 于 2021-6-3 13:53 编辑

回复可见
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
1091
注册时间
2018-6-24
在线时间
156 小时
发表于 2021-3-31 22:26:11 来自手机 | 显示全部楼层
这代码功力深厚
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
1091
注册时间
2018-6-24
在线时间
156 小时
发表于 2021-4-1 11:35:07 | 显示全部楼层
函数指针结构体,我看就是数组。库函数设计了形参2个计算值和一个函数指针。直接调用用数组也行,有意思啊,回调函数为啥叫回调一词,就是调函数呗
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-5-20
在线时间
4 小时
发表于 2021-5-20 14:31:52 | 显示全部楼层
此代码确实功力深厚
回复 支持 反对

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1836
金钱
1836
注册时间
2014-12-4
在线时间
717 小时
 楼主| 发表于 2021-8-31 13:14:45 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

0

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
706
金钱
706
注册时间
2020-8-15
在线时间
54 小时
发表于 2021-8-31 21:35:14 | 显示全部楼层
111学习学习
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2021-8-26
在线时间
7 小时
发表于 2021-9-1 09:41:56 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2021-1-7
在线时间
10 小时
发表于 2021-9-1 16:26:57 | 显示全部楼层
回复看看
回复 支持 反对

使用道具 举报

4

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2017-6-14
在线时间
71 小时
发表于 2021-9-1 18:14:47 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
871
金钱
871
注册时间
2018-4-20
在线时间
485 小时
发表于 2021-9-2 16:14:07 | 显示全部楼层
666666
回复 支持 反对

使用道具 举报

39

主题

127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2289
金钱
2289
注册时间
2015-5-6
在线时间
248 小时
发表于 2021-9-2 20:22:48 | 显示全部楼层
学习一下,不错的函数指针加结构体混全运用
回复 支持 反对

使用道具 举报

0

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2021-5-1
在线时间
161 小时
发表于 2021-9-3 23:22:28 | 显示全部楼层
学习一下!
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2019-9-20
在线时间
15 小时
发表于 2022-3-30 10:30:42 | 显示全部楼层
777777777777888
回复 支持 反对

使用道具 举报

11

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1128
金钱
1128
注册时间
2021-6-17
在线时间
206 小时
发表于 2022-4-1 19:50:22 | 显示全部楼层
666666666666666
回复 支持 反对

使用道具 举报

42

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
466
金钱
466
注册时间
2014-2-24
在线时间
100 小时
发表于 2022-4-2 14:47:03 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-5-13
在线时间
2 小时
发表于 2022-4-2 16:00:45 | 显示全部楼层
回复看看是啥
回复 支持 反对

使用道具 举报

0

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
645
金钱
645
注册时间
2020-11-21
在线时间
128 小时
发表于 2022-4-4 17:09:55 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2019-5-17
在线时间
273 小时
发表于 2022-4-6 09:25:22 | 显示全部楼层
回复可见
回复 支持 反对

使用道具 举报

0

主题

47

帖子

0

精华

高级会员

Rank: 4

积分
724
金钱
724
注册时间
2019-3-1
在线时间
392 小时
发表于 2022-4-6 10:16:41 | 显示全部楼层
looklook
回复 支持 反对

使用道具 举报

40

主题

259

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
459
金钱
459
注册时间
2016-5-19
在线时间
192 小时
发表于 2022-4-6 21:42:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2022-4-8
在线时间
6 小时
发表于 2022-4-8 15:47:25 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表