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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 快速排序算法——C/C++

    快速排序算法——C/C++快速排序1、算法思想快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。2、实现原理2.1、设置两个变量low、high,排序开始时:low=0,high=size-1。2.2、整个数组找基准正确位置,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面…

    2022年6月24日
    24
  • 404错误页面的设置方法步骤(图)附404模板下载

    404错误页面的设置方法步骤(图)附404模板下载

    2021年9月24日
    57
  • Oracle 11g安装报错[通俗易懂]

    Oracle 11g安装报错[通俗易懂]1.报错:[root@server1database]#./runInstaller&amp;amp;amp;gt;&amp;amp;amp;gt;&amp;amp;amp;gt;Ignoringrequiredpre-requisitefailures.Continuing…PreparingtolaunchOracleUniversalInstallerfrom/tmp/OraInstall2018-07-02_08…

    2022年7月25日
    47
  • 将 VSCode 快捷键修改为 eclipse的快捷键[通俗易懂]

    将 VSCode 快捷键修改为 eclipse的快捷键[通俗易懂]文章目录1、VSCode中打开`命令面板`,如下图所示。2)在命令面板中输入`keyboard`3)打开`首选项:打开键盘快捷方式(JSON)`4)在`keybindings.json`中配置快捷键配置1(常用的快捷键)配置2(最全的快捷键)1、VSCode中打开命令面板,如下图所示。2)在命令面板中输入keyboard在命令面板中输入keyboard,然后在列表中选择首选项:打开键盘快捷方式(JSON):3)打开首选项:打开键盘快捷方式(JSON)点击

    2022年6月3日
    98
  • [面试题]25个MySQL经典面试题「建议收藏」

    [面试题]25个MySQL经典面试题「建议收藏」经典题目1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联;2、MySQL中myisam与innodb的区别,至少5点2.1问5点不同;2.2innodb引擎的4大特性2.32者selectcount(*)哪个更快,为什么3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义3.1varchar与char的区别3.2…

    2022年8月27日
    3
  • 迭代器Python_python进阶路线

    迭代器Python_python进阶路线迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。可迭代对象我们已经知道可以对l

    2022年7月28日
    3

发表回复

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

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