但是很多时候我们一般在结构体中定义函数指针用的比较多一点。下面再举一个简单的例子。
#include "sys.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
/****************************************
* 函数指针结构体 开发者写的结构体
***************************************/
typedef struct
{
uint8_t (*p_sum)(uint8_t, uint8_t);
uint8_t (*p_sub)(uint8_t, uint8_t);
uint8_t (*p_mul)(uint8_t, uint8_t);
float (*p_div)(uint8_t, uint8_t);
} Operation_T;
/*声明结构体变量g_Operation*/
Operation_T g_Operation;
/*使用者写的回调函数*/
uint8_t cal_sum(uint8_t a, uint8_t b)
{
return a + b;
}
/*使用者写的回调函数*/
uint8_t cal_sub(uint8_t a, uint8_t b)
{
return a - b;
}
/*使用者写的回调函数*/
uint8_t cal_mul( uint8_t a, uint8_t b)
{
return a * b;
}
/*使用者写的回调函数*/
float cal_div(uint8_t a, uint8_t b)
{
return a / b;
}
/*结构体变量g_Operation初始化*/
Operation_T g_Operation = {cal_sum, cal_sub, cal_mul, cal_div};
int main(void)
{
delay_init();
uart_init(9600);
printf("www.zhiguoxin.cn\r\n");
printf("微信公众号:果果小师弟\r\n");
uint8_t a = 10;
uint8_t b = 8;
/*使用函数指针调用函数*/
printf("%d\r\n", g_Operation.p_sum(a, b));
printf("%d\r\n", g_Operation.p_sub(a, b));
printf("%d\r\n", g_Operation.p_mul(a, b));
printf("%f\r\n", g_Operation.p_div(a, b));
while(1)
{
}
}