【C语言笔记】函数指针作为结构体成员

1、函数指针在C语言中的意义

在C语言程序中,数据结构和算法是两个基本的元素。C语言的基本数据类型、结构体、数组和联合体是数据结构的代表;C语言中的函数则是算法的代表。只有将数据结构和算法有机结合才能构成具有一定功能的程序。

2、函数指针的应用

函数指针在嵌入式中的应用非常广泛,常常把函数指针作为结构体的成员、作为函数的参数等。如在物联网操作系统RT-Thread内核源码中,有如下代码:

(1)函数指针作为结构体成员

(2)函数指针作为函数的参数

举例说明

建立一个结构体,用于四则运算(根据函数指针的指向可以选择加法运算、减法运算、乘法运算、除法运算),如

typedef int (*fun_t)(int, int);    

// 包含了数据和算法的结构体
struct Source
{
 int a;        // 数据a
 int b;        // 数据b
 fun_t operation;  // 算法operation
};

主函数内可以进行如下操作:

struct Source data;
int result;
data.a = 200;
data.b = 100;
/* 两个数相加的操作 */
data.operation = add2;  
result = data.operation(data.a, data.b);
printf("加法运算: %d+%d = %d\n",data.a, data.b, result);

函数指针data.operation指向加法函数add2,则调用data.operation就可以进行加法运算。同理,有:

/* 两个数相减的操作 */
data.operation = sub2;
result = data.operation(data.a, data.b);
printf("减法运算: %d-%d = %d\n",data.a, data.b, result);

/* 两个数相乘的操作 */
data.operation = mul2;
result = data.operation(data.a, data.b);
printf("乘法运算: %d*%d = %d\n",data.a, data.b, result);

/* 两个数相除的操作 */
data.operation = div2;
result = data.operation(data.a, data.b);
printf("除法运算: %d/%d = %d\n",data.a, data.b, result);

运行结果:

以上就是函数指针作为结构体成员的笔记,如有错误欢迎指出!


我的个人博客:https://zhengnianli.github.io/

我的微信公众号:嵌入式大杂烩

[](


 上一篇
【C语言笔记】函数指针作为函数的参数 【C语言笔记】函数指针作为函数的参数
函数指针有两种常用的用法,一种是作为结构体成员,关于函数指针作为结构体成员的用法可移步至上一篇【C语言笔记】函数指针作为结构体成员进行查看。另一种是函数指针作为函数的参数。这一篇分享的是函数指针作为函数的参数。 一、函数指针作为函数的参数函
2019-01-04
下一篇 
【C语言笔记】你的黑窗口闪退? 【C语言笔记】你的黑窗口闪退?
上一篇中写到了Windows下体验Linux环境,其中的测试代码简单的打印一句话,如: 编译后得到test.exe,运行得到如下结果: 在命令行下运行可以输出结果,但是在文件夹下,双击运行test1.exe却发现黑窗口一闪而过: 怎么
2018-12-24
  目录