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

#include <stdio.h>
#include <stdlib.h>
#include <vector>

using namespace std;

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

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

float (*pFunc1)(const vector<float> &);

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

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

    return fMax;
}

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

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

    return fMin;
}

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

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

    auto fAverage = fSum / v.size();

    return fAverage;
}

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

//C语言函数指针举例
int main()
{
    //用法1 先定义函数指针类型float (*pFunc1)(const vector<float> &);
    vector<float> 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<float> &) = NULL;
    float (*pFunc2)(const vector<float> &) = NULL;

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

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

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

    //用法3 把函数指针定义为数据类型typedef float (*pPointer)(const vector<float> &);
    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;
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中有两个相关概念,函数指针指针函数。 1. 函数指针(Function Pointers):函数指针是指向函数指针变量。它可以用来存储和调用特定类型的函数。通过函数指针,可以在运行时动态地选择要执行的函数函数指针的声明形式为:`返回类型 (*指针变量名)(参数列表)`。例如,以下是一个函数指针的示例: ```c #include <stdio.h> void display(int num) { printf("Number: %d\n", num); } int main() { void (*func_ptr)(int); // 声明一个函数指针变量 func_ptr = display; // 将函数的地址赋值给函数指针变量 func_ptr(10); // 通过函数指针调用函数 return 0; } ``` 2. 指针函数(Pointer to a Function):指针函数是一个返回指向函数指针函数。它返回的是函数的地址,而不是函数的返回值。指针函数的声明形式为:`返回类型 (*函数名)(参数列表)`。以下是一个指针函数的示例: ```c #include <stdio.h> int add(int num1, int num2) { return num1 + num2; } int subtract(int num1, int num2) { return num1 - num2; } int (*getOperation(char op))(int, int) { if (op == '+') { return add; // 返回add函数的地址 } else { return subtract; // 返回subtract函数的地址 } } int main() { int num1 = 10, num2 = 5; char op = '+'; int (*operation)(int, int); // 声明一个指针函数变量 operation = getOperation(op); // 将指针函数的返回值(函数地址)赋值给指针函数变量 int result = operation(num1, num2); // 通过指针函数调用对应的函数 printf("Result: %d\n", result); return 0; } ``` 以上就是函数指针指针函数的基本概念和用法。通过它们,可以实现更灵活的函数调用和动态选择执行的函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark-puls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值