将一个函数作为参数交给另一个函数的编程范式叫做函数式编程。
在C++中,函数也有自己的内存地址,即函数指针。
但是函数不像变量一样可以进行值传递,我们在将其作为函数进行传递时,需要传递它的地址。
函数要接收另一函数作为参数,就必须有一个形式参数用于接收函数指针变量作为参数。
int g(float (*f)(int),int a) { return (*f)(a); }
在这个函数中,第一个参数需要一个返回值类型为float且有一个int类型参数的函数,第二个参数就是普通的int类型的值。
对这样一个函数g,因为第一个参数传入的是地址,它的第一个参数在被使用时,需要用到取值符*。
不同于传变量地址时需要用取值的做法,在调用上面这个g函数,并且将函数指针变量作为参数时,直接将函数名传入就可以了。如果我们希望将:
float sqrt_minus_one(int x) { return sqrt(x)-1; }
作为参数,和变量number一起传给g,调用时则应该写:
g(sqrt_minus_one,number)
将 sqrt_minus_one函数和变量a传入到了g后,形式参数float(*f)(int)接收了sqit_minus_one函数的地址,形式参数int a 接收了number的值。