数组和函数数组
1.首先看一下函数,每个函数的函数名表示的是函数的入口地址,简单看一下,如下图:
1 #include "stdafx.h" 2 3 #include "stdio.h" 4 #include "stdlib.h" 5 6 void Test(void) 7 { 8 printf("Test \r\n"); 9 } 10 11 int main(void) 12 { 13 printf("%d %d \n",Test,&Test); 14 system("pause"); 15 }
运行结果如下:
2、函数指针
1 1 typedef void (*pfun)(void);//函数指针 2 2 3 3 void Test(void) 4 4 { 5 5 printf("test \r\n"); 6 6 } 7 7 8 8 int main() 9 9 { 10 10 pfun pfun; 11 11 pfun=Test; 12 12 printf("%d %d \n",pfun,Test); 13 13 pfun(); 14 14 system("pause"); 15 15 }
运行代码如下:
3、函数指针数组
1 // 函数名.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include "stdio.h" 6 #include "stdlib.h" 7 8 9 typedef void (*PFUN)(void);//函数指针 10 #define NUM 10 11 12 void Test(void) 13 { 14 printf("%s\n",__FUNCTION__); 15 //printf("test \r\n"); 16 } 17 void Test1(void) 18 { 19 printf("%s\n",__FUNCTION__); 20 } 21 void Test2(void) 22 { 23 printf("%s\n",__FUNCTION__); 24 } 25 void Test3(void) 26 { 27 printf("%s\n",__FUNCTION__); 28 } 29 void Test4(void) 30 { 31 printf("%s\n",__FUNCTION__); 32 } 33 34 PFUN pfun[NUM]=//函数指针数组 35 { 36 Test, 37 Test1, 38 Test2, 39 }; 40 41 int main() 42 { 43 pfun[2](); 44 system("pause"); 45 }
4.函数指针数组在数据解析中的应用(比如串口命令的解析)
1 // 函数名.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include "stdio.h" 6 #include "stdlib.h" 7 8 9 void Test(void) 10 { 11 printf("%s\n",__FUNCTION__); 12 //printf("test \r\n"); 13 } 14 void Test1(void) 15 { 16 printf("%s\n",__FUNCTION__); 17 } 18 void Test2(void) 19 { 20 printf("%s\n",__FUNCTION__); 21 } 22 void Test3(void) 23 { 24 printf("%s\n",__FUNCTION__); 25 } 26 void Test4(void) 27 { 28 printf("%s\n",__FUNCTION__); 29 } 30 31 typedef enum 32 { 33 CMD_HD_VER = 0x10, // 34 CMD_SW_VER = 0x11, // 35 }CMDCODE; 36 37 typedef void (*PFUN)(void);//函数指针 38 39 40 typedef struct 41 { 42 CMDCODE CmdCode; 43 PFUN pfun; 44 }COMMCOMMAND; 45 46 47 COMMCOMMAND CmdList[]= 48 { 49 {CMD_HD_VER,Test}, 50 {CMD_SW_VER,Test1}, 51 }; 52 53 int main() 54 { 55 int cmd=0; 56 int i=0; 57 printf("请输入合法命令:0x10或者0x11\r\n"); 58 scanf("%d",&cmd); 59 60 for(i=0;i<sizeof(CmdList)/sizeof(CmdList[0]);i++) 61 { 62 if(CmdList[i].CmdCode==cmd) 63 { 64 CmdList[i].pfun(); 65 break; 66 } 67 } 68 if(i==sizeof(CmdList)/sizeof(CmdList[0])) 69 { 70 printf("Error Command \r\n"); 71 } 72 system("pause"); 73 }