抄个小本本,做个小笔记。用最短的时间去了解新玩意,岂不美哉。
第一种方法
uint8_t cal_sum(uint8_t a, uint8_t b) { return a * b; } int main(void) { /*......*/ uint8_t a=10; uint8_t b=8; /*定义一个函数指针*/ uint8_t (*func_ptr)(uint8_t, uint8_t); /*将函数名赋值给函数指针*/ func_ptr = cal_sum; func_ptr(a,b); //等同cal_sum(a,b); =80 }
第二种方法,第二钟方法好,兼容性高。
uint8_t cal_sum(uint8_t a, uint8_t b) { return a * b; } int main(void) { /*......*/ uint8_t a=10; uint8_t b=8; /*定义一个函数指针*/ typedef uint8_t (*func_ptr) (uint8_t, uint8_t); /*将函数名赋值给函数指针*/ func_ptr pFun; pFun = cal_sum; pFun(a,b); //等同cal_sum(a,b); =80 }
函数指针也常常体现在回调函数中。
回调函数:函数指针作为函数形参时。
例如:uint8_t (compute_func)(uint8_t (*func_ptr)(uint8_t, uint8_t),uint8_t,uint8_t);
函数指针uint8_t (*func_ptr)(uint8_t, uint8_t)作为回调函数。
uint8_t cal_sum(uint8_t a, uint8_t b) { return a * b; } uint8_t (compute_func)(uint8_t (*func_ptr)(uint8_t, uint8_t),uint8_t a,uint8_t b) { return func_ptr(a,b); } int main(void) { /*......*/ uint8_t a=10; uint8_t b=8; compute_func(cal_sum,a,b); //等同cal_sum(a,b); =80 }