C语言函数指针与结构体函数指针在嵌入式中的应用
一、起因
在嵌入式操作系统开发时,发现非常多的功能实现是基于结构体函数指针实现的。函数指针在嵌入式中的应用非常广泛,常常把函数指针作为结构体的成员、作为函数的参数等。为了填补C语言的基础知识,特此记录学习过程。
在C语言程序中,数据结构和算法是两个基本元素。C语言的基本数据类型、结构体、数组和联合体是数据结构的代表;C语言中的函数则是算法的代表。只有将数据结构和算法有机结合才能构成具有一定功能的程序。
二、C语言函数指针基础
1. 函数指针定义
函数指针的定义形式为:
1 | returnType (*pointerName)(param list); |
returnType
为函数返回值类型pointerName
为指针名称param list
为函数参数列表
注意:()
的优先级高于*
,第一个括号不能省略。
2. 基本示例
1 |
|
3. 函数指针定义示例
1 | int add2(int x, int y) { |
4. 使用typedef定义函数指针类型
1 | typedef int (*FUN)(int, int); |
三、结构体中定义函数指针
1. 结构体指针变量的定义形式
形式1:先定义结构体类型,再定义变量
1 | struct 结构体标识符 { |
形式2:在定义类型的同时定义变量
1 | struct 结构体标识符 { |
形式3:直接定义变量
1 | struct { |
2. 结构体中指向函数的指针示例
1 |
|
3. 回调函数示例
1 |
|
四、函数指针的两个主要用途
1. 将函数作为参数传递给函数
1 |
|
2. 引用不在代码段中的函数
在嵌入式系统中,常用于调用固化在ROM中的系统函数。例如编写bootload的跳转函数
1 |
|
五、嵌入式系统中结构体函数指针的应用
1. 函数指针作为结构体成员
2. 函数指针作为函数的参数
六、使用结构体指针编写回调函数示例
1 |
|
说些什么吧!