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,无参数列表的一个函数),它有一个参数,参数为一个函数指针

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java怎么用_如何使用Java编写程序

    java怎么用_如何使用Java编写程序步骤1:您需要什么:1)一台运行Windows的PC(任何Windows软件将起作用:XP以外的其他软件可能需要稍作修改。请参见下面的链接。)2)Internet连接3)管理能力为了开始编程,我们首先需要下载Java开发套件(JDK)和Java软件。您的计算机可能已经具有JavaRuntimeEnvironment。这通常被称为JRE,或简称Java。这使您可以运行Java程序,但不能对它们进行编…

  • 汉字转拼音源码的两个类

    汉字转拼音源码的两个类StrToPinyin.cs//类一文件名usingSystem;usingSystem.Data;usingSystem.Configuration;usingSyst

  • struts2之多个文件上传

    struts2之多个文件上传

  • COM编程之三 QueryInterface

    COM编程之三 QueryInterface【1】IUnknown接口客户同组件交互都是通过接口完成的。在客户查询组件的其它接口时,也是通过接口完成的。而那个接口就是IUnknown。IUnknown接口的定义包含在Win32SDK中的UNKNEN.h头文件中。引用如下:1interfaceIUnknown2{3virtualHRESULT__stdcallQueryInterface(const…

  • 最大子矩阵和 leetcode_leetcode有效的括号

    最大子矩阵和 leetcode_leetcode有效的括号给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出 matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。示例 1:输入:matrix = [[5,2],[1,6]], k = 1输出:7解释:坐标 (0,

  • shell 编译和执行java文件

    shell 编译和执行java文件

发表回复

您的电子邮箱地址不会被公开。

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