好像还有点意犹未尽
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
总结一下,不要被回调函数的各种高深讲解给弄晕了头脑,它实际就是将你的函数用函数指针替代了,函数指针中存放的就是你的函数地址。
为了让函数指针CallBack_Ptr能指向你Led_On()的地址,你需要做一个注册功能函数CallBack_Reg(),将你要调用的函数地址传递给函数指针CallBack_Reg(Led_On);即CallBack_Ptr = Led_On。
这样,在调用CallBack_Ptr 的时候就等于调用了Led_On。
完美解决。。
最后说明一下函数指针的定义
typedef void(pFun *)(void); //第一个void表示指向的函数返回参数为空,第二个void表示输入参数为空
对比一下它要指向的函数 void Led_On(void) ; 数数void数量和位置理解了吧。
那如果有个函数带有输入参数怎么办呢?
聪明的你一定想到了
typedef void( pFun *)(unsigned char);
它可以指向的函数就如同 void Led_OnOff(unsigned char ) ;
使用
pFun CallBack_Ptr ; //定义函数指针
..........//注册函数指针
CallBack_Ptr (InputDat); //使用函数指针,并传递值InputDat给了函数
.........
对于有返回值和多个输入参数的函数就希望聪明的你举一反三了!
完毕!