函数指针应用总结(未完成)

来源:互联网 发布:楼凤阁 源码 编辑:程序博客网 时间:2024/06/16 18:55

3.回调函数中,这是内核中用的最多的,希望认真对待下面几个示例,最好都上机跑一下!!

void RegisterKeyEventCB(void EventCB(* KeyEvent_t)); 

   if(EventCB) 
   KeyEventCB = EventCB;  

示例1:

#include<stdio.h>typedef void (*pcb)(char*);void GetCallBack(pcb callback){printf("GetCallBack\n");callback("csj");}void fCallback(char *s){printf("fCallback:%s\n",s);}void main(){GetCallBack(fCallback);}

示例2:

#include<stdio.h>typedef void (*put)(char *);void getput(put p_name,char *name){printf("getput\n");p_name(name);}void myname(char* s){printf("my name is %s\n",s);}void main(){getput(myname,"csj");}

示例3:

#include<stdio.h>typedef void (*put)(char *);void getput(put p_name,put p_age,char *name,unsigned char age){printf("getput\n");p_name(name);p_age(age);}void myage(unsigned char age){printf("my age is %d\n",age);}void myname(char* s){printf("my name is %s\n",s);}void main(){getput(myname,myage,"csj",22);}

示例4:


1.结构体中

/* 数据结构 */typedef struct _Protocal_Callbacks{    BOOL (*pPackage_Check)(u8 *pdata, u16 len);  /* 数据包地址域、接口类型、校验确认 */    BOOL (*pSet_Addr)(u8 addr);                   /* 设置设备地址 */    BOOL (*pSet_BPS)(u8 bps);                     /* 设置波特率 */    BOOL (*pSet_Dot_Group)(u8 *pdata, u8 len);   /* 测温点分组配置 */    BOOL (*pSet_Time)(u8 *pdata, u8 len);         /* 设置时间 */    BOOL (*pSet_OverTem)(u8 group, s16 tem);                /* 设置过温阈值 */    BOOL (*pSet_Font)(u8 group, u8 dot, u8 num, u8 *pdata, u8 len);  /* 设置字模 */    BOOL (*pSet_Tem_Y)(s16 tem);          /* 设置Y轴标度 */    BOOL (*pRead_Addr)(void);             /* 读地址 */    BOOL (*pRead_BPS)(void);              /* 读波特率 */    BOOL (*pRead_Dot_Group)(void);       /* 读分组信息 */    BOOL (*pRead_OverTem)(void);         /* 读过温阈值 */    BOOL (*pRead_Version)(void);         /* 读软件版本 */    BOOL (*pSet_433M_Frq)(u8 frq);       /* 设置433M频点 */    BOOL (*pSet_Pan_ID)(u16 panid);      /* 设置PanID */    BOOL (*pRestart_System)(void);       /* 重启设备 */    BOOL (*pSet_IP_Imf)(u8 *pdata, u8 len);     /* 设置IP信息 */    BOOL (*pEnd)(void);                   /* 触发包发送 */    void (*pNULL_Fun)(u8 code);           /* 不支持此选项码 */    void (*pData_Err)(void);              /* 造成溢出的错误 */}CB_Typdef;
实例:


2.数组中

const void (* handle[200])(void) =  

     fun0, 
     fun1, 
    ... 
    fun199 

实例:

#include<stdio.h>void foo1(void){printf("i am foo1\n");}void foo2(void){printf("i am foo2\n");}void foo3(void){printf("i am foo3\n");}void main(){int i = 0;const void (*headle[200])(void)={foo1,foo2,foo3};for(i=0;i<3;i++)headle[i]();}



0 0
原创粉丝点击