函式指標 教學與筆記。
函式指標宣告
無參數輸入宣告
以函式指標 ptr 取得函式 foo() 的位址,兩個記憶體使用空間是相同的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <stdio.h>
void foo() { printf("function pointer\n"); }
void main() { void (*ptr)() = 0; ptr = foo;
foo(); ptr();
printf("%p\n", foo); printf("%p\n", ptr); }
|
宣告細節
正確函式指標宣告
錯誤函式指標宣告
fptr 為一個函式
而不是指標變數,回傳的資料型態為 int*。
加上 typedef
使用 typedef 建立一個指向 void() 函式的指標,將宣告的命名變為更簡單的形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
typedef void (*function_pointer)();
void hello() { printf("Hello world\n"); }
void main() { function_pointer fp = &hello;
hello(); fp(); }
|
運用在多個函式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <stdio.h>
typedef int (*MathFp)(int);
int plus_one(int a) { return ++a; }
int minus_one(int a) { return --a; }
int Calc(int x, MathFp Opt) { return Opt(x); }
void main() { printf("1 + 1 = %d\n", Calc(1, plus_one)); printf("1 - 1 = %d\n", Calc(1, minus_one)); }
|