|
本帖最后由 bigfanofloT 于 2016-9-13 15:55 编辑
1.简介
指针函数
本质:是一个函数,其返回值为指针(地址)而已。
格式:
类型说明符 * 函数名(参数)
由于返回的是一个地址,所以类型说明符一般是int。
例如:
int *Fun1(); int * Fun2(int,int);
函数指针
本质:是一个指针,只不过它指向的是一个函数(函数名是函数的入口地址,可以通过它来调用函数)。
格式:
类型说明符 (*函数名)(参数)
严格的说这里的函数名应该叫做指针的变量名。
2.指针函数在gokit微信宠物屋中的运用举例在hal_key.c有如下函数:
keyTypedef_t keyInitOne(uint8_t keyNo ,uint32_t keyRccPeriph, GPIO_TypeDef * keyPort, uint32_t keyGpio, gokitKeyFunction shortPress, gokitKeyFunction longPress)
{
keyTypedef_t singleKey;
singleKey.keyRccPeriph = keyRccPeriph;
singleKey.keyPort = keyPort;
singleKey.keyGpio = keyGpio;
singleKey.keyNum = keyNo;
singleKey.longPress = longPress;
singleKey.shortPress = shortPress;
return singleKey;
}
该函数的作用是初始化一个连接了按键的GPIO,检测到按键的长短按后分别调用不同的按键事件处理函数,利用函数指针,实现了回调的功能,好处是,用户可以自定义按键处理函数,十分方便移植,传入参数有6个,我们这里只关注gokitKeyFunction shortPress,
void key1ShortPress(void)
{
printf("KEY1 PRESS\r\n");
}
void key1LongPress(void)
{
printf("KEY1 PRESS LONG ,Wifi Reset\r\n");
gizwitsSetDefault();
}
|
|