在结构体中使用函数指针的例子


void menu11(void);
void menu12(void);
void menu21(void);


typedef struct
{
  byte a;
  byte b;
  byte c;
  byte d;
  byte e;
  void (*operation)(void);
}TABLE;

TABLE table[3] =
{
  {0, 0, 1, 0, 2, menu11},
  {1, 0, 1, 1, 4, menu12},
  {2, 2, 3, 0, 5, menu21},
 
};



void setup()
{
  Serial.begin(9600);
  delay(5000);
  
}

void loop()
{
  for(int i=0;i<3;i++)
  {
    table[i].operation();
    delay(1000);
  }
  
}

以下是代码分析

typedef struct
{
  byte a;
  byte b;
  byte c;
  byte d;
  byte e;
  void (*operation)(void);
}TABLE;

定义一个结构体,里面包含了一个函数指针变量void (*operation)(void);
operation是一个指向函数的指针。

TABLE table[3] =
{
  {0, 0, 1, 0, 2, menu11},
  {1, 0, 1, 1, 4, menu12},
  {2, 2, 3, 0, 5, menu21},
 
};

然后定义一个结构体数组,每一个数组都是一个结构体,最后的menu11,menu12,manu21都是函数的名字,因为函数的名字就是函数的地址。

void loop()
{
  for(int i=0;i<3;i++)
  {
    table[i].operation();
    delay(1000);
  }
  
}

table[i].operation();这里的i在0,1,2之间变化。程序每次执行到这里,会把table[i].operation对应的menu11,menu12,menu21函数执行一遍。

执行的结果是在串口监视器里面显示:
在这里插入图片描述
这样做的好处是,只需要改变变量i的值就能执行不同的函数。比如运用到显示屏的刷新等等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值