1、关于指针函数的范例关于指针函数的范例 #define ubyte unsigned char#define uint unsigned int#define ulong unsigned longubyte kbCode; / 按键编码纪录ubyte kbStatus; / 键盘当前状态,可以理解为菜单层次/ 按键的四种不同工作状态对应的函数指针对照表,每三字节对应一个按键/ 每一项包含三个字节,分别代表按键码,键盘状态,对应处理程序编号/ 本表对应于日常操作,不是修改状态ubyte code TAB046=0x11,0x00,0x01, / 按键1 func10x12,0x00,0x01,
2、/ 按键2 func10x14,0x00,0x01, / 按键3 func10x1a,0x00,0x01, / 按键4 func10x2a,0x00,0x01, / 按键5 func10x4a,0x00,0x01, / 按键6 func10x01,0x00,0x01, / 按键7 func10x02,0x00,0x01, / 按键8 func10x04,0x00,0x01, / 按键9 func10x10,0x00,0x01, / 按键0 func10x20,0x00,0x01, / 按键. func10x08,0x00,0x02, / 按键Clear func20x18,0x00,0x03,
3、 / 按键U/D func30x8a,0x01,0x04, / 按键shift func40x40,0x02,0x05, / 按键last func50x00; / 本表结束标志ubyte code TAB140=0x12,0x03,0x06, / 按键2 func60x14,0x03,0x07, / 按键3 func70x2a,0x03,0x08, / 按键5 func80x4a,0x03,0x09, / 按键6 func90x01,0x03,0x12, / 按键7 func180x8a,0x03,0x14, / 按键shift func200x11,0x01,0x0a, / 按键1 fun
4、c100x1a,0x01,0x0b, / 按键4 func110x04,0x01,0x0c, / 按键9 func120x10,0x01,0x0d, / 按键0 func130x80,0x01,0x0e, / 按键Enter func140x08,0x00,0x02, / 按键Clear func20x20,0x03,0x13, / 按键. func190x00; / 本表结束标志ubyte code TAB27=0x40,0x02,0x0f, / 按键last func150x08,0x00,0x02, / 按键Clear func20x00; / 本表结束标志ubyte code TAB3
5、40=0x11,0x03,0x10, / 按键1 func160x12,0x03,0x10, / 按键2 func160x14,0x03,0x10, / 按键3 func160x1a,0x03,0x10, / 按键4 func160x2a,0x03,0x10, / 按键5 func160x4a,0x03,0x10, / 按键6 func160x01,0x03,0x10, / 按键7 func160x02,0x03,0x10, / 按键8 func160x04,0x03,0x10, / 按键9 func160x10,0x03,0x10, / 按键0 func160x20,0x03,0x10, /
6、 按键. func160x08,0x00,0x02, / 按键clear func20x80,0x01,0x11, / 按键Enter func170x00; / 本表结束标志ubyte code *TAB4=TAB0,TAB1,TAB2,TAB3; / 总指针表/ 指针函数列表code void(code *KeyProcTab)()=NoKey, /*0# (00H)#*/func1, /*1# (01H)#*/func2, /*2# (02H)#*/func3, /*3# (03H)#*/func4, /*4# (04H)#*/func5, /*5# (05H)#*/func6, /*6
7、# (06H)#*/func7, /*7# (07H)#*/func8, /*8# (08H)#*/func9, /*9# (09H)#*/func10, /*10# (0AH)#*/func11, /*11# (0BH)#*/func12, /*12# (0CH)#*/func13, /*13# (0DH)#*/func14, /*14# (0EH)#*/func15, /*15# (0FH)#*/func16, /*16# (10H)#*/func17, /*17# (11H)#*/func18, /*18# (12H)#*/func19, /*19# (13H)#*/func20 /*2
8、0# (14H)#*/;void NoKey()return;void func0();void func1();.void func20();/ 键盘监控,根据当前状态特征指向不同的指针表,并调用相应的函数 /void mon(ubyte key)ubyte code *data pTab;kbCode=key;pTab=*(TAB+kbStatus); / 根据当前状态特征指向分指针表while(*pTab != key / 查表if(*pTab!=0)pTab+;kbStatus=*pTab; / 取状态特征字节pTab+; / 指向执行函数(*KeyProcTab*pTab)(); / 指针函数调用