C语言介绍

示例

就像char和一样int,一个函数是C的基本功能。因此,您可以声明一个指向一个的指针:这意味着您可以将哪个函数传递给另一个函数以帮助其完成工作。例如,如果您有一个graph()显示图形的函数,则可以将要绘制图形的函数传递到中graph()。

// 几个外部定义使示例更清晰
extern unsigned int screenWidth;
extern void plotXY(double x, double y);

// graph()函数。
// 传递边界:应绘制的最小和最大X和Y。
// 还传递实际功能进行绘图。
void graph(double minX, double minY,
           double maxX, double maxY,
           ???? *fn) {            // 语法见下文

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

        double y = fn(x);         // 通过调用传入的fn()获得x的y

        if (minY<=y && y<maxY) {
            plotXY(x, y);         // 绘制计算点
        } // 如果
    } for
} // 图(minX,minY,maxX,maxY,fn)

用法

因此,上面的代码将图形化您传递给它的任何函数-只要该函数满足某些条件:即,您传入double一个double进出即可。有许多功能,这样的- ,sin(),,等-但也有许多是没有,比如本身!cos()tan()exp()graph()

语法

那么,如何指定可以传递给哪些功能graph()以及不能传递给哪些功能呢?常规方法是使用一种可能不容易阅读或理解的语法:

double (*fn)(double); // fn是指向函数的指针,该指针需要一个双精度值并返回一个

上面的问题是试图同时定义两件事:函数的结构和它是指针的事实。因此,将两个定义分开!但是,通过使用typedef,可以实现更好的语法(更易于阅读和理解)。