C++ 函数指针
1、什么是函数指针
函数是实现特定功能的程序代码的集合,函数代码在内存中也要占据一段存储空间,这段空间的起始地址称为函数的入口地址。C++规定函数的入口地址为函数的指针,即函数名既代表函数,又是函数的指针(或地址)。
C++指向函数的指针变量,定义形式为:
返回类型 (*函数指针变量名)(形参列表);
可以指向如下形式的函数:
返回类型 函数名(形参列表)
{
函数体
}
例如:
int max(int a, int b);//max函数原型 int min(int a, int b);//min函数原型 int(*p)(int a, int b);//定义函数指针变量 p = max; p = min;
上面称p指向函数max,可以指向max,也可以指向min,即可以指向所有与它具有相同的返回类型、参数个数、参数类型的函数。调用时如下调用:
int c = p(a,b);//等价于c=max(a,b);
2、函数指针的用途
指向函数的指针多用于指向不同的函数,从而可以利用指针变量调用不同的函数,相当于将函数调用由静态方式(固定的调用指定函数)变为动态方式(调用哪个函数由指针的值来决定)。熟练掌握函数指针的应用,有利于程序的模块化设计,提高程序的可扩展性。
例题:
编写程序计算如下公式:
说明:这里用梯形公式法求定积分的近似值。求f(x)的定积分就是求f(x)曲线与x轴包围图形的面积,梯形法是把所要求的面积垂直分成n个小梯形,然后面积求和。
#include <iostream>
#include <cmath>
using namespace std;
double integral(double a,double b,double(*f)(double x))
{
//求定积分
int n = 1000;
double h,x,s = 0.0;
h = (b - a)/n;
for(int i = 1;i <= n;i++)
{
x = a + (i - 1)*h;
//调用f函数求f(x)、f(x+h)
s = s + (f(x) + f(x+h))*h / 2;
}
return s;
}
double f1(double x)
{
return 1+x;
}
double f2(double x)
{
return exp(-x*x/2);
}
double f3(double x)
{
return x*x*x;
}
int main()
{
double a,b;
cin>>a>>b;
cout<<(integral(a,b,f1)+integral(a,b,f2)+integral(a,b,f3));
return 0;
} 

鲁公网安备 37148202000241号