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,可以实现更好的语法(更易于阅读和理解)。