1. 程式人生 > 其它 >在結構體中使用函式指標的例子

在結構體中使用函式指標的例子

技術標籤:我的學習筆記指標arduino


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的值就能執行不同的函式。比如運用到顯示屏的重新整理等等。