为什么做梦| 结界是什么意思| 定妆用什么好| 吃什么缓解痛经| 流产期间吃什么好| 70年产权是从什么时候开始算| 甲状腺囊实性结节是什么意思| eva鞋底是什么材质| 一箭双雕是指什么生肖| 肾素低说明什么| 什么叫快闪| 硬下疳是什么意思| 梦到自己的妈妈死了是什么意思| 喝什么茶叶减肥效果最好| 手皮脱皮是什么原因| ceremony是什么意思| 大便糊状什么原因| 孔子名什么| 头上出汗是什么原因| 为什么脚底板发黄| 季付是什么意思| 便秘什么原因引起的| 岁月如歌是什么意思| 杏仁和什么不能一起吃| 晒太阳有什么好处| 新陈代谢慢是什么原因| 白猫进家有什么预兆| 吃苦瓜有什么好处| 胎儿左侧侧脑室增宽的原因是什么| 为国为民是什么生肖| 喝酒后吃头孢有什么反应| 清鱼是什么鱼| 读军校需要什么条件| 什么叫免疫力| 屁是什么气体| 吃氨糖有什么好处和坏处| 7月7日是什么日子| 什么是铂金| 盐酸对人体有什么危害| 古怪是什么意思| 拉肚子为什么会发烧| 罗曼蒂克什么意思| 拖累是什么意思| 做梦梦见钓鱼是什么意思| 平日是什么意思| 蚂蟥是什么| 五险一金和社保有什么区别| 乳酸脱氢酶高是什么原因| 什么牌子的床垫好| 燥湿什么意思| 手足口病吃什么食物| 用什么| 男人第一次什么 感觉| mmc是什么意思| 极是什么意思| 妊娠试验阴性是什么意思| 夏祺是什么意思| 得宝松是什么药| 中暑吃什么药见效快| 腰肌劳损需要注意什么| 阳历5月20日是什么星座| 农历五月二十八是什么日子| 梦见来例假是什么预兆| 什么汤降火| 浑身乏力什么病的前兆| 宝宝消化不好吃什么调理| 清热利湿吃什么药| 在什么位置| fdg代谢增高是什么意思| 眼袋大是什么原因引起的| 嗯嗯嗯是什么意思| 气胸是什么意思| 下巴两边长痘痘是什么原因| 殚精竭虑是什么意思| lino是什么面料| 7.8什么星座| 黄水疮用什么药膏最快| 身上经常痒是什么原因| model是什么牌子| ltp什么意思| 散瞳快散和慢散有什么区别| 股市xd是什么意思| 飞蛾为什么会扑火| 疖肿什么意思| 脖子黑是什么病| 吕洞宾代表什么生肖| 西皮是什么意思| er是什么元素| 偶发室性早搏是什么意思| 怀孕了吃什么药可以打掉| 淘宝交易关闭是什么意思| 瓜皮什么意思| 马蜂窝能治什么病| 后背痛是什么原因| 什么是同房| 什么是膜性肾病| 鸟屎掉衣服上有什么预兆| 为什么会脱发| pp材质是什么材料| 妈祖叫什么名字| u型枕有什么作用| afd是什么意思| 霖五行属什么| qt是什么| 胃肠紊乱吃什么药| 低热是什么症状| 水瓜有什么作用和功效| k代表什么意思| 地府是什么意思| 呼吸道感染一般用什么消炎药| 肺慢性炎症是什么意思| 三五成群是什么生肖| 内伤湿滞什么意思| 查胆固醇挂什么科| 上大厕拉出血是什么原因| 梦见已故老人是什么预兆| 中指戴戒指代表什么| 抑郁状态和抑郁症有什么区别| 淋巴炎吃什么药| 胸腺肿瘤是什么病| 猪生肠是什么部位| 不够时间好好来爱你是什么歌| 用红笔写名字代表什么| 朱元璋为什么杀徐达| 杀马特什么意思| 红红的枫叶像什么| 黄精有什么作用和功效| 心衰吃什么药最好| 去肝火喝什么茶效果最好| 伤官见官是什么意思| 人中长代表什么| 脑梗吃什么中药| 肉瘤是什么样子图片| 手指关节疼痛挂什么科| 每天尿都是黄的是什么原因| 景气是什么意思| 儿童头晕挂什么科| 疥疮是什么| 铁皮石斛可以治什么病| 什么中药可以降糖| 经常低血糖是什么原因| 高危妊娠是什么意思啊| 炉鼎是什么意思| 儿童调理脾胃用什么药最好| 小便多是什么原因| 心电图逆钟向转位是什么意思| 电饭煲什么内胆最好| 脾主四肢是什么意思| 单脐动脉是什么意思| 心焦是什么意思| 怀孕有什么感觉| 京东自营店是什么意思| 女人白带多什么原因| 破伤风有什么症状| 春天是什么样子的| 梦见移坟墓是什么预兆| 师范类是什么意思| 尿频吃什么药最好| 社康是什么| 身份证后4位代表什么| 私处痒用什么药| 拉肚子吃什么药最有效| 妈宝女是什么意思| 什么是天丝| 水瓶女和什么星座最配| 狗狗打喷嚏流鼻涕怎么办吃什么药| 血糖高看什么科室| 梦见喝酒是什么意思| 白细胞异常是什么原因| 血压低吃什么最快最有效| 银为什么会变黑| 小娘皮什么意思| lf是什么意思| n标志的鞋子是什么牌子| 血糖偏高能吃什么水果和食物最好| 1027是什么星座| 什么是张力| 乳腺增生什么意思| 吃完桃子不能吃什么| 什么动物没尾巴| 点痣挂什么科| 总蛋白低是什么意思| 日本旅游买什么东西最划算| 楼房风水主要看什么| 灵魂摆渡人是什么意思| 女人梦到地震预示什么| 脸上涂什么可以美白| 凉糕是什么做的| 宝宝细菌感染吃什么药| 早泄吃什么药好| 印度属于什么亚| 中药吃多了对人体有什么伤害| 聂的拼音是什么| rapido是什么牌子| 剑锋金命五行缺什么| 孩子嗓子有痰吃什么药| 虐恋是什么意思啊| 无所不用其极什么意思| 痔疮什么感觉| 坐围是什么| 催丹香是什么意思| 头疼 挂什么科| 大排畸什么时候做| 锌过量会引发什么症状| 十月什么星座| 三朵玫瑰花代表什么意思| 吃什么能马上晕倒住院| 结婚 为什么| 婆家是什么意思| 吐槽是什么意思| 抑菌液有什么作用| ca724偏高是什么意思| 红曲红是什么| 为什么半夜流鼻血| 吃大虾不能吃什么| 吃什么去除体内湿热| 傻狍子什么意思| 贫血的人吃什么水果| 免运费是什么意思| 什么叫公租房| 千山鸟飞绝的绝是什么意思| 荔枝和什么吃会中毒| 秋天能干什么| 西门子洗衣机不脱水是什么原因| 洋地黄是什么药| 晚上9点半是什么时辰| 吃西瓜有什么好处| 脑梗都有什么症状| 前列腺在哪里男人的什么部位| 汗斑是什么| 什么情况下吃丹参滴丸| 肚脐周围痛是什么原因| 今天的日子适合做什么| 妈妈的爱是什么| 肛瘘是什么症状表现| 耳垂后面有痣代表什么| 雾化是治疗什么的| 喝菊花有什么好处| 日照香炉生紫烟的香炉是什么意思| 银杏叶是什么颜色| 凌晨4点是什么时辰| 董明珠什么星座| 王羲之的儿子叫什么名字| 闻鸡起舞是什么生肖| 脸上长癣用什么药膏| 左侧附件区囊性占位是什么意思| 白色鼻毛是什么原因| 脚趾长痣代表什么意思| 脂肪肝吃什么食物好| 月经一直不干净吃什么药| pt950是什么材质| asa是什么意思| 衣原体阴性是什么意思| 狗为什么不能吃洋葱| 想要孩子需要做什么检查| 青柠是什么意思| 小猫咪能吃什么| 软水是什么水| 吃什么东西能减肥| 一生无虞是什么意思| 锦衣卫是干什么的| 总爱放屁是什么原因| 肾错构瘤是什么原因引起的| 车牌号选什么数字吉利| 百度

刘赐贵召开座谈会 征求省第七次党代会报告意见建议

函数指针:

百度 再者,如果我将科技人才招来并设计一个高级算法,此算法不仅能下围棋,还能用作医疗、自动驾驶和军事领域,那么设计者的发明价值就非常显著,即强化个人的力量。

将“函数声明”中的“函数名”改成“(指针变量名)”。但是这里需要注意的是:“(指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。

因为函数名本身就可以表示该函数地址(指针),因此在获取函数指针时,可以直接用函数名,也可以取函数的地址。

int?Max(int,?int);??//函数声明

int(*p)(int,?int);??//定义一个函数指针

p?=?Max;??//把函数Max赋给指针变量p,?使p指向Max函数

c?=?(*p)(a,?b);??//通过函数指针调用Max函数

p = Max可以改成 p = &Max
c = (*p)(a, b) 可以改成 c = p(a, b)

指针即地址

回调函数:

回调函数定义:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

即:把一段可执行的代码像参数传递那样传给其它代码,而这段代码会在某个时刻被调用执行,这即为回调。

如果代码立即被执行就称为 同步回调,如果过后再执行则称为 异步回调;

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为一个参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数的优势:

因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。他只需要知道存在一个具有特定原型和限制条件的被调用函数;换句话说,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。

int Callback_1(int a)   ///< 回调函数1
{
    printf("Hello, this is Callback_1: a = %d ", a);
    return 0;
}

int Callback_2(int b)  ///< 回调函数2
{
    printf("Hello, this is Callback_2: b = %d ", b);
    return 0;
}

int Callback_3(int c)   ///< 回调函数3
{
    printf("Hello, this is Callback_3: c = %d ", c);
    return 0;
}

int Handle(int x, int (*Callback)(int)) ///< 注意这里用到的函数指针定义
{
    Callback(x);
}

int main()
{
    Handle(4, Callback_1);
    Handle(5, Callback_2);
    Handle(6, Callback_3);
    return 0;
}

如上述代码:可以看到,Handle()函数里面的参数是一个指针,在main()函数里调用Handle()函数的时候,给它传入了函数Callback_1()/Callback_2()/Callback_3()的函数名,这时候的函数名就是对应函数的指针,也就是说,回调函数其实就是函数指针的一种用法。

#include <stdio.h>
#include <stdlib.h>

/****************************************
 * 函数指针结构体
 ***************************************/
typedef struct _OP {
    float (*p_add)(float, float); 
    float (*p_sub)(float, float); 
    float (*p_mul)(float, float); 
    float (*p_div)(float, float); 
} OP; 

/****************************************
 * 加减乘除函数
 ***************************************/
float ADD(float a, float b) 
{
    return a + b;
}

float SUB(float a, float b) 
{
    return a - b;
}

float MUL(float a, float b) 
{
    return a * b;
}

float DIV(float a, float b) 
{
    return a / b;
}

/****************************************
 * 初始化函数指针
 ***************************************/
void init_op(OP *op)
{
    op->p_add = ADD;
    op->p_sub = SUB;
    op->p_mul = &MUL;
    op->p_div = &DIV;
}

/****************************************
 * 库函数
 ***************************************/
float add_sub_mul_div(float a, float b, float (*op_func)(float, float))
{
    return (*op_func)(a, b);
}

int main(int argc, char *argv[]) 
{
    OP *op = (OP *)malloc(sizeof(OP)); 
    init_op(op);
    
    /* 直接使用函数指针调用函数 */ 
    printf("ADD = %f, SUB = %f, MUL = %f, DIV = %f\n", (op->p_add)(1.3, 2.2), (*op->p_sub)(1.3, 2.2), 
            (op->p_mul)(1.3, 2.2), (*op->p_div)(1.3, 2.2));
     
    /* 调用回调函数 */ 
    printf("ADD = %f, SUB = %f, MUL = %f, DIV = %f\n", 
            add_sub_mul_div(1.3, 2.2, ADD), 
            add_sub_mul_div(1.3, 2.2, SUB), 
            add_sub_mul_div(1.3, 2.2, MUL), 
            add_sub_mul_div(1.3, 2.2, DIV));

    return 0; 
}

一个GPRS模块联网的小项目,使用过的同学大概知道2G、4G、NB等模块要想实现无线联网功能都需要经历模块上电初始化、注册网络、查询网络信息质量、连接服务器等步骤,这里的的例子就是,利用一个状态机函数(根据不同状态依次调用不同实现方法的函数),通过回调函数的方式依次调用不同的函数,实现模块联网功能,如下:

/*********  工作状态处理  *********/
typedef struct
{
 uint8_t mStatus;
 uint8_t (* Funtion)(void); //函数指针的形式
} M26_WorkStatus_TypeDef;  //M26的工作状态集合调用函数


/**********************************************
** >M26工作状态集合函数
***********************************************/
M26_WorkStatus_TypeDef M26_WorkStatus_Tab[] =
{    
    {GPRS_NETWORK_CLOSE,  M26_PWRKEY_Off  }, //模块关机
    {GPRS_NETWORK_OPEN,  M26_PWRKEY_On  }, //模块开机
    {GPRS_NETWORK_Start,   M26_Work_Init  }, //管脚初始化
    {GPRS_NETWORK_CONF,  M26_NET_Config  }, /AT指令配置
    {GPRS_NETWORK_LINK_CTC,  M26_LINK_CTC  }, //连接调度中心  
    {GPRS_NETWORK_WAIT_CTC, M26_WAIT_CTC  },  //等待调度中心回复 
    {GPRS_NETWORK_LINK_FEM, M26_LINK_FEM  }, //连接前置机
    {GPRS_NETWORK_WAIT_FEM, M26_WAIT_FEM  }, //等待前置机回复
    {GPRS_NETWORK_COMM,  M26_COMM   }, //正常工作    
    {GPRS_NETWORK_WAIT_Sig,  M26_WAIT_Sig  },  //等待信号回复
    {GPRS_NETWORK_GetSignal,  M26_GetSignal  }, //获取信号值
    {GPRS_NETWORK_RESTART,  M26_RESET   }, //模块重启
}
/**********************************************
** >M26模块工作状态机,依次调用里面的12个函数   
***********************************************/
uint8_t M26_WorkStatus_Call(uint8_t Start)
{
    uint8_t i = 0;
    for(i = 0; i < 12; i++)
    {
        if(Start == M26_WorkStatus_Tab[i].mStatus)
        {          
      return M26_WorkStatus_Tab[i].Funtion();
        }
    }
    return 0;
}

所以,如果有人想做个NB模块联网项目,可以copy上面的框架,只需要修改回调函数内部的具体实现,或者增加、减少回调函数,就可以很简洁快速的实现模块联网。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
三十岁是什么之年 线下培训是什么意思 健康证照片用什么底色 卫生院院长是什么级别 重症肌无力用什么药
什么是钓鱼执法 粉瘤是什么东西 酸菜鱼加什么配菜好吃 胎毛是什么 尿常规白细胞3个加号什么意思
犒赏是什么意思 血糖高可以喝什么粥 男人嘴小代表什么意思 什么是收缩压和舒张压 2005年是什么生肖
抽象什么意思 每天吃黄瓜有什么好处 单人旁的字和什么有关 勾芡用什么粉 自性是什么意思
吃土豆有什么好处和坏处hcv7jop7ns1r.cn 社区建档需要什么资料hcv8jop6ns5r.cn 雨对什么字hcv9jop1ns2r.cn 破釜沉舟是什么意思hcv8jop3ns4r.cn er什么意思gysmod.com
2.5什么星座520myf.com 什么是克氏综合征xjhesheng.com 吃布洛芬有什么副作用bjcbxg.com 男命正印代表什么hcv7jop6ns7r.cn 梦见自己尿裤子了是什么意思hcv7jop6ns5r.cn
上颌窦炎是什么症状hcv8jop1ns0r.cn 怀孕初期吃什么对胎儿发育好hcv9jop2ns0r.cn 纨绔子弟是什么意思hcv8jop9ns3r.cn 赤潮是什么hcv8jop4ns7r.cn 周围神经病是什么病hcv8jop2ns1r.cn
高血压可以吃什么水果hcv9jop5ns4r.cn 眼珠子疼是什么原因hcv9jop0ns8r.cn 低压108有什么危险hcv8jop7ns4r.cn 幼对什么hcv8jop2ns9r.cn 98年属虎的是什么命hcv9jop7ns1r.cn
百度