当前位置:首页 > C++ > 正文内容

C++ 函数指针

admin3年前 (2020-11-13)C++2077

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;
}

扫描二维码推送至手机访问。

版权声明:本文由lovedm.club发布,如需转载请注明出处。

本文链接:http://lovedm.club/?id=103

分享给朋友:

“C++ 函数指针” 的相关文章

C++ vector

vector是一个容器,类似于数组,使用的顺序存储结构,可以看做是可以动态拓展的数组,使用vector的优点是其以常数时间进行索引,缺点是在中间进行插入和删除操作代价比较高,但是如果插入和删除发生在尾端速度仍然较快。使用时需要包含头文件#include<vector>初始化方式:vect...

C++计算程序运行的时间

最近在程序中有个读取文件的操作,想知道耗费的时间,查找之后大家都在用C++11中的库chrono,找了个能运行的现成写好的类:链接代码如下:#include <iostream> #include <chrono> using names...

C++ 计算点到空间直线的距离

最近的工作中需要计算空间中点到直线的距离,网上找了个算法:链接很简单,就是余弦定理算出余弦,知道余弦算出正弦,然后求出高也就是距离。当然这里不考虑效率问题,实验性的代码,先能用再优化。struct Point {     double ...

GDAL构建Delaunay三角网

GDAL能创建Delaunay三角网我是没想到的,需要包含头文件gdal_alg.h使用GDALTriangulationCreateDelaunay函数,函数说明在此 ,三个参数:第一个是点的个数,第二三个分别是点的X坐标和点的Y坐标。返回值是GDALTriangulation* 类型的...

C++ 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有...

OpenCV中简单的添加噪声

随机数生成器用到的是C++11中的新方法。以下代码来自OpenCV计算机视觉编程攻略第三版2.2.2节void salt(Mat image, int n) { default_random_engine generator; unifor...