#include <stdio.h> int add (int firstNumber, int secondNumber); int subtract (int firstNumber, int secondNumber); int calculator (int firstNumber, int secondNumber, int (*fp) (int, int)); int main () { int firstNumber = 1; int secondNumber = 2; int (*fp) (int, int) = add; printf ("%d\n", calculator (firstNumber, secondNumber, fp)); fp = subtract; printf ("%d\n", calculator (firstNumber, secondNumber, fp)); return 0; } int add (int firstNumber, int secondNumber) { return firstNumber + secondNumber; } int subtract (int firstNumber, int secondNumber) { return firstNumber - secondNumber; } int calculator (int firstNumber, int secondNumber, int (*fp) (int, int)) { return (*fp) (firstNumber, secondNumber); }
程式碼如上。宣告2個函式add & subtract以及1個函式calculator。
其中calculator的參數允許傳入一個函式來讓calculator呼叫該函式。
在第10行時同樣宣告一個函式指標fp,並且指向add函式。
第11行時則將函式指標fp作為引數傳遞給calculator函式。因為此時fp指向add函式,因此claculator函式會呼叫add函式。
在13行時則將函式指標fp改成指向subtract函式,因此在14行的calculator會呼叫subtract函式。
以上是教科書講到函式指標時經常舉的例子。
我還在念書時對這段程式常有疑惑:
printf ("%d\n", add(firstNumber, secondNumber)); printf ("%d\n", subtract(firstNumber, secondNumber));像這樣直接呼叫add & subtract函式不就好了,為什麼還要多宣告一個函式指標來指向函式?讓函式指標呼叫該函式,這不是多此一舉嗎?