在結構體中使用函式指標的例子
阿新 • • 發佈:2021-02-13
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的值就能執行不同的函式。比如運用到顯示屏的重新整理等等。