C語言第6課——函式指標
阿新 • • 發佈:2018-11-25
定義
函式指標,其本質是一個指標變數,該指標指向這個函式。總結來說,函式指標就是指向函式的指標。
宣告格式:型別說明符 (*函式名) (引數)
int (*fun)(int x,int y);
函式指標是需要把一個函式的地址賦值給它,有兩種寫法:
fun = &Function;
fun = Function;
取地址運算子&不是必需的,因為一個函式識別符號就表示了它的地址,如果是函式呼叫,還必須包含一個圓括號括起來的引數表。
呼叫函式指標的方式也有兩種:
x = (*fun)();
x = fun();
兩種方式均可,其中第二種看上去和普通的函式呼叫沒啥區別,如果可以的話,建議使用第一種,因為可以清楚的指明這是通過指標的方式來呼叫函式。
例項
以下例項聲明瞭函式指標變數 p,兩個int型別引數,無返回值,指向Add、Decr、Multi、Div:
#include <stdio.h> #define _CRT_SECURE_NO_DEPRECATE #pragma warning(disable:4996) void(*p)(int x, int y); void Add(int a, int b); void Decr(int a, int b); void Multi(int a, int b); void Div(int a, int b); int main() { int a, b; char ch; printf("請輸入兩個整數:\n"); scanf_s("%d%d", &a, &b); ch = '+'; //改變運算子,會呼叫不同的程式 switch (ch) { case '+': p = Add; (*p)(a, b); break; case '-': p = Decr; (*p)(a, b); break; case '*': p = Multi; (*p)(a, b); break; case '/': p = Div; (*p)(a, b); break; default: break; } return 0; } void Add(int a, int b) { printf("%d+%d=%d", a, b, a + b); } void Decr(int a, int b) { printf("%d-%d=%d", a, b, a - b); } void Multi(int a, int b) { printf("%d*%d=%d", a, b, a * b); } void Div(int a, int b) { printf("%d/%d=%d", a, b, a / b); }
回撥函式(函式指標作為某個函式的引數)
函式指標變數可以作為某個函式的引數來使用的,回撥函式就是一個通過函式指標呼叫的函式。
簡單講:回撥函式是由別人的函式執行時呼叫你實現的函式。
例項
showInfo(int a,int b,int (*p)(a,b))就是一個回撥函式。第三個引數為函式指標。
#include <stdio.h> void showInfo(int a, int b, int(*p)(a, b)); int Add(int a, int b); int Decr(int a, int b); int Multi(int a, int b); int Div(int a, int b); int main() { showInfo(5, 2,Add); return 0; } void showInfo(int a, int b, int(*p)(a, b)) { printf("%d", (*p)(a, b)); } int Add(int a, int b) { return a + b; } int Decr(int a, int b) { return a - b; } int Multi(int a, int b) { return a * b; } int Div(int a, int b) { return a / b; }