函式指標介紹

就像 charint 一樣,函式是 C 的基本特徵。因此,你可以宣告一個指標:這意味著你可以傳遞哪個函式來呼叫另一個函式來幫助它完成它的工作。例如,如果你有一個顯示圖形的 graph() 函式,你可以將哪個函式傳遞 graph()

// A couple of external definitions to make the example clearer
extern unsigned int screenWidth;
extern void plotXY(double x, double y);

// The graph() function.
// Pass in the bounds: the minimum and maximum X and Y that should be plotted.
// Also pass in the actual function to plot.
void graph(double minX, double minY,
           double maxX, double maxY,
           ???? *fn) {            // See below for syntax

    double stepX = (maxX - minX) / screenWidth;
    for (double x=minX; x<maxX; x+=stepX) {

        double y = fn(x);         // Get y for this x by calling passed-in fn()

        if (minY<=y && y<maxY) {
            plotXY(x, y);         // Plot calculated point
        } // if
    } for
} // graph(minX, minY, maxX, maxY, fn)

用法

因此,上面的程式碼將描繪你傳遞給它的任何函式 - 只要該函式滿足某些條件:即,你傳遞 double 並獲得 double。有許多功能 - sin()cos()tan()exp() 等 - 但有許多不是,如 ti​​huan11 本身!

句法

那麼如何指定哪些功能可以傳遞到 graph() 以及哪些功能不可以?傳統方法是使用可能不容易閱讀或理解的語法:

double (*fn)(double); // fn is a pointer-to-function that takes a double and returns one

上面的問題是嘗試同時定義兩件事:函式的結構,以及它是指標的事實。那麼,拆分兩個定義! 但是通過使用 typedef,可以實現更好的語法(更易於閱讀和理解)。