C++函数指针、指针函数、返回值为函数指针的函数浅谈

C++函数指针、指针函数、返回值为函数指针的函数浅谈C++函数指针、指针函数、返回值为函数指针的函数浅谈引言函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。函数指针函数指针是一种特殊的指针,它指向函数的入口。例如int(*add)(int,int);定义了一个函数指针add,用于指向返回值为int,并且有两个int参数的函数…

大家好,又见面了,我是你们的朋友全栈君。

C++函数指针、指针函数、返回值为函数指针的函数浅谈

引言

函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。
而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。

函数指针

函数指针是一种特殊的 指针,它指向函数的入口。
例如int (*add)(int, int);定义了一个函数指针add,用于指向返回值为int,并且有两个int参数的函数,下面用实例来说明

/**
 * 作者:lyn
 * 时间:2018.10.30
 * 此程序用来演示函数指针
 */
#include<iostream>
using namespace std;

int addfunc(int a, int b) {
        return a + b;
}
int main() {
        int (*add)(int, int) = addfunc;
        //两种方法都可以
        //int (*add)(int, int) = &addfunc;

        int result = (*add)(1, 2);
        //两种方法都可以,建议使用第一种
        //int result = add(1, 2);
        cout << "通过函数指针调用函数进行计算结果:" << result << endl;
        result = addfunc(1, 2);
        cout << "通过直接调用函数进行计算结果:" << result << endl;
        return 0;
}

在这里插入图片描述

指针函数

指针函数是一种返回值为指针的 函数
例如A *createA();声明了一个返回值为指向A类型的指针的,参数列表为空的函数(这句话读起来可能有一··绕口),实例说明

/**
 * 作者:lyn
 * 时间:2018.10.30
 * 该程序用来演示指针函数
 */
#include<iostream>
using namespace std;
class A {
        public:
                A(int a) {
                        this->a = a;
                }
                int getA(){
                        return a;
                }
        private:
                int a;
};

//返回值为指向类型A的指针的函数
A *createA() {
        return new A(1);
}

int main(){
        //创建一个指向A类型的指针,并调用createA创建一个A类型的对象
        A* b = createA();
        //通过指针调用类的方法
        cout << "b->a = " << b->getA() << endl;
        return 0;
}

在这里插入图片描述

返回值为函数指针的函数

其实在搞懂了函数指针和指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值为函数指针。
先给一个例子:

/*
*本例是SGISTL源码中的一个函数,比普通的返回值为函数指针的函数要更复杂一点
*因为本例中函数的参数也是一个函数指针
*/
void (* set_malloc_handler(void (*f)()))()

我们把例子从里往外看
void (*f)()是一个函数指针,它用于指向一个返回值为void,无参数列表的函数
* set_malloc_handler(void (*f)())这是一个指针函数,返回值为指针,它有一个参数,参数为一个函数指针(返回值为void,无参数列表的函数)
void (* set_malloc_handler(void (*f)()))()这是一个指针函数,返回值为函数指针(返回值为void,无参数列表的一个函数),它有一个参数,参数为一个函数指针

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152178.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • laravel 获取目录下的所有目录Storage::directories

    laravel 获取目录下的所有目录Storage::directories

    2022年2月14日
    201
  • 正则化的作用以及L1和L2正则化的区别

    正则化的作用以及L1和L2正则化的区别0正则化的作用正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。但是使用正则化来防止过拟合的原理是什么?L1和L…

    2022年7月13日
    13
  • linux切换java版本_java_home environment variable

    linux切换java版本_java_home environment variable© 版权声明:本文为博主原创文章,转载请注明出处本文根据官方文档加上自己的理解,仅供参考官方文档:https://docs.spring.io/spring-security/

    2022年8月4日
    6
  • MATLAB 2017b 安装教程 (推荐)

    MATLAB 2017b 安装教程 (推荐)MATLAB2017b安装教程matlab2017b安装包及安装教程链接:https://pan.baidu.com/s/1riEvbTQnDSeo7bhix7YLZQ密码:z4em本Markdown编辑器使用[Sta**重点内容**ckEdit][6]修改而来,用它写博客,将会带来全新的体验哦:Matlab安装教程:1、下载文件,得到破解文件。*点…

    2022年5月28日
    54
  • 浅谈MFCC

    MFCC(Mel-frequencycepstralcoefficients):梅尔频率倒谱系数。梅尔频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系。梅尔频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征。主要用于语音数据特征提取和降低运算维度。例如:对于一帧有512维(采样点)数据,经过MFCC后可以提取出最重要的40维(一般而言)数据同时也达到了将维

    2022年4月4日
    261
  • 关于curl: (2) Failed Initialization「建议收藏」

    关于curl: (2) Failed Initialization

    2022年2月6日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号