c语言函数指针与指针函数

#include
#include
#include

using namespace std;

//1 C语言函数指针
//解释:这是一种很特殊的指针,它的指向是一个函数的入口
//作用:该指针可以接受一个函数的地址,代表这个函数执行函数的操作

//函数指针举例
//下面是一个函数指针pFunc, 它只能指向返回值为float,形参为vector的函数

float (*pFunc1)(const vector &);

//函数名   : findMax
//函数功能  : 查找vector容器的最大值
//输入参数  : v
//输出参数  : 无
//返回值    : 返回vector容器的最大值

float findMax(const vector &v)
{
    float fMax = 0;
    for (float curValue : v)
    {
        if (curValue > fMax) fMax = curValue;
    }

    return fMax;
}

//函数名   : findMin
//函数功能  : 查找vector容器的最小值
//输入参数  : v
//输出参数  : 无
//返回值    : 返回vector容器的最小值

float findMin(const vector &v)
{
    auto fMin = 0xFFFFFF;
    for (auto curValue : v)
    {
        if (curValue < fMin) fMin = curValue;
    }

    return fMin;
}

//函数名   : average
//函数功能  : 计算vector容器的所有元素的平均值
//输入参数  : v
//输出参数  : 无
//返回值    : 返回vector容器的所有元素的平均值

float average(const vector &v)
{
    auto fSum = 0;
    for (auto curValue : v)
    {
        fSum += curValue;
    }

    auto fAverage = fSum / v.size();

    return fAverage;
}

typedef float (*pPointer)(const vector &);

//C语言函数指针举例
int main()
{
    //用法1 先定义函数指针类型float (*pFunc1)(const vector &);
    vector v;
    v.push_back(10.44);
    v.push_back(15.8);
    v.push_back(112.9);

    pFunc1 = findMax;
    float fMax = (*pFunc1)(v);

    pFunc1 = findMin;
    float fMini = (*pFunc1)(v);

    pFunc1 = average;
    float fAverage = (*pFunc1)(v);

    //用法2 使用到时再定义函数指针float (*pFunc2)(const vector &) = NULL;
    float (*pFunc2)(const vector &) = NULL;

    pFunc2 = findMax;
    fMax = (*pFunc2)(v);

    pFunc2 = findMin;
    fMini = (*pFunc2)(v);

    pFunc2 = average;
    fAverage = (*pFunc2)(v);

    //用法3 把函数指针定义为数据类型typedef float (*pPointer)(const vector &);
    pPointer pFunc3 = findMax;
    fMax = (*pFunc3)(v);

    pFunc3 = findMin;
    fMini = (*pFunc3)(v);

    pFunc3 = findMin;
    fMini = (*pFunc3)(v);

    return 0;
}

//2 C语言指针函数
//解释:这是一种返回值为指针的函数
//作用:调用这个函数,他的最终返回值是一个指针,指针类型必须一致,否则赋值失败

//函数名   : add
//函数功能  : 两数相加
//输入参数  : v1 第一个数
//输入参数  : v2 第二个数
//输出参数  : 无
//返回值    : 返回两数相加后的变量指针

float *add(int v1, int v2)
{
    float *pSum = (float*)malloc(1 * sizeof(float)); //使用必须调用delete释放内存,否则会有内存泄露
    pSum = NULL;

    //*pSum 是解指针
    *pSum = v1 + v2;

    return pSum;
}

//C语言指针函数举例
int main()
{
    float *pSum = add(10, 20);
    delete pSum; //一定要释放,否则内存泄露

    return 0;
}

你可能感兴趣的:(C/C++)