数组和函数数组

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 }

 

转载于:https://www.cnblogs.com/csczq54/p/9307595.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值