如下例為選單驅動程式的簡化版
#include <stdio.h>
void fun1(void);
void fun2(void);
void fun3(void);
int main(void)
{
void (*f[3])(void) = {fun1, fun2, fun3};
int i;
for (i = 0; i < 3; i++) {
(*f[i])();
}
printf("\n上面以函數指標各自呼叫fun1、fun2、fun3...\n");
return 0;
}
void fun1(void)
{
printf("選項1...\n");
}
void fun2(void)
{
printf("選項2...\n");
}
void fun3(void)
{
printf("選項3...\n");
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:funptr.c
功能:示範函數指標的使用
作者:張凱慶
時間:西元2010年4月 */編譯後執行,如下

第 3 到第 5 行
void fun1(void); void fun2(void); void fun3(void);
一共宣告了三個函數,然後第 9 行
void (*f[3])(void) = {fun1, fun2, fun3};這是宣告一個名為 f 存放函數指標的陣列,由於指標宣告的星號 * ,運算優先次序比用為函數參數列的小括弧為低,所以這裡指標陣列 *f[3] 要用小括弧圍起來。
因為是存放函數指標的陣列,所以連同函數的回傳值型態及參數列都要加進宣告之中。
其後的大括弧裡面放的即為函數名稱,呼叫函數以陣列的使用方式即可。
這個程式的目的主要為示範函數指標的使用,因此第 12 到第 15 行
for (i = 0; i < 3; i++) {
(*f[i])();
}用迴圈依序呼叫三個函數。
沒有留言:
張貼留言