收藏官网首页
查看: 11945|回复: 1

[资料] C语言函数指针和指针函数

321

主题

1054

帖子

4502

积分

论坛元老

Rank: 8Rank: 8

积分
4502
QQ
跳转到指定楼层
楼主
发表于 2016-9-13 15:55:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
本帖最后由 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();

}




1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
沙发
发表于 2016-9-25 14:14:13 | 只看该作者
分析得好。就是得多讲讲实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表