iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++函数指针的用法有哪些
  • 205
分享到

C++函数指针的用法有哪些

2023-06-26 04:06:37 205人浏览 泡泡鱼
摘要

这篇“c++函数指针的用法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++函数指针的用法有哪些”文章吧。C++函数

这篇“c++函数指针的用法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++函数指针的用法有哪些”文章吧。

    C++函数指针详细理解

    函数指针初识

    函数指针是指向函数的指针,并不等于函数,它能够执行函数的操作,可以跟指针变量一起来理解,其基本声明格式为:

    type (*ptrname)(形参列表);

    例子,声明一个比较两个字符串大小的函数指针

    bool (*cp)(const string s1, const string s2);

    需要注意的是,不要去掉括号!!!如果去掉括号,含义就变成了返回一个bool指针的函数的声明!

    函数指针指向函数类型

    在使用函数指针时,函数指针可以发挥与函数相同的功效,即也可以起到执行任务的作用,但是函数指针需要初始化,而且不存在函数指针类型的转换,在进行初始化的时候,函数指针可以被赋值为nullptr或常量NULL,或者指向一个函数,但是,指向这个函数时,需要有严格的要求,它需要严格按照两者的返回类型,形参列表相对应

    例子

    // 两个示例函数bool compareLength(const string s1, const string s2){    //当s1的长度大于s2的长度,返回true,否则返回false    return s1.size() > s2.size()?true:false;}int getLength(const string s1){    //返回字符串的长度    return s1.size();}// 初始化前面定义的cp函数指针cp = nullptr;  // 正确,初始化为空cp = NULL;     // 正确,初始化为空常量NULLcp = compareLength;  // 正确,函数的返回形式和形参列表和类型都是一样的cp = getLength; // 错误,返回类型和形参列表不一样

    使用函数

    接着上面的思路,函数调用的方式可以这样写

    // 函数指针调用函数cp(s1, s2);// 调用2(*cp)(s1, s2);// 函数调用,与cp一样compareLength(s1, s2);

    函数指针作为形参使用

    可以将函数或者函数指针作为某一个函数的形式参数传入并使用,如C++11的thread头文件线程的构造函数中急需要传递一个函数指针的实例

    #include<thread>std::thread t(函数指针, ..Args);

    其声明定义形式如下,比如将上面定义的函数或函数指针传入一个新的函数中,作为两者的比较依据

    int packageFunc(const string &s1, const string &s2, bool comp(const string &s1, const string &s2)){    if(comp(s1, s2)){        cout<<"Yes"<<endl;    }else{        cout<<"No"<<endl;    }}// 或者以指针的形式来声明函数形参, 这种定义与上面那种定义是等价的int packageFunc(const string &s1, const string &s2, bool (*cp)(const string &, const string &));

    考虑到这样的形式参数声明太过冗长,可以使用typedef和decltype来简化操作,比如上面代码又可以这样写

    typedef bool Func(const string&, const string&);int packageFunc(const string &s1, const string &s1, Func);// 或者写成这样,这条语句与上面的typedef声明语句等价typedef decltype(compareLength) Func2;int packageFunc(const string &s1, const string &s1, Func2)

    或者定义成函数指针的形式

    typedef bool (*fp)(const string &, const string &);int packageFunc(const string s1, const string s2, fp);// 定义成函数指针的形式,与上面的声明等价typedef decltype(compareLength) *fp_ptr;int packageFunc(const string s1, const string s2, fp_ptr);

    或者还可以这样写

    using fp = bool (*)(const string &, const string &);

    typedef:是自定义数据类型的声名符,可以用于定义自己的数据类型,与using有相似的地方

    decltype:它返回一个函数类型,即对传入的函数类型进行处理,返回一个返回类型和形参定义都与传入函数相等的函数类型,但是它无法将返回的函数类型自动转变为函数指针,所以再需要函数指针是要加*

    函数指针作为返回值

    函数指针也可作为返回值,比如传统的Unix进程间通过signal通信的方式的signal函数就会返回函数指针类型,如

    #include<signal.h>函数指针 = signal(SIGABRT, 函数句柄);// 其返回的就是一个函数指针,即上一个与这个信号绑定的函数句柄,如果是第一次绑定返回NULL

    但是函数类型不可,依据上面的简要声明,

    using F = int(int *, int);using PF = int (*)(int*, int);PF f1(int); // 正确,PF为指函数的指针F  f2(int); // 错误,F为函数类型F* f3(int); // 正确,显式的制定了函数返回函数指针的形式

    也可以直接声明,但是不太好理解,会导致代码的可读性差,不建议这样做

    int (*f1(int))(int*, int);

    还可以以后置形式声明一个函数返回一个函数指针类型

    auto f1(int) -> int (*)(int*, int);

    练习

    编写函数的声明,令其接收两个int形参并且返回类型也是int;然后声明一个vector对象,零其元素执行函数的指针

    #include<iOStream>#include<vector>using namespace std;int func1(int a, int b){    // 加法    return a+b;}int func2(int a, int b){    // 减法    return a - b;}int main(int arGC, char *argv[]){    decltype(func1) *p1 = func1, *p2 = func2;    vector<decltype(func1)*> s = {p1,p2};    int a = 10,b = 5;    printf("add:[%d + %d = %d]\n", a, b, s[1](a,b));    printf("sub:[%d - %d = %d]\n", a, b, s[1](a,b));}
    add:[10 + 5 = 5]sub:[10 - 5 = 5]

    以上就是关于“C++函数指针的用法有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网其他教程频道。

    --结束END--

    本文标题: C++函数指针的用法有哪些

    本文链接: https://www.lsjlt.com/news/306645.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++函数指针的用法有哪些
      这篇“C++函数指针的用法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++函数指针的用法有哪些”文章吧。C++函数...
      99+
      2023-06-26
    • C++ 函数指针的应用场景有哪些?
      函数指针应用于以下场景:回调函数:允许在函数调用完成后执行另一个函数。多态性:根据对象类型动态调用不同方法。数据结构存储:将函数存储在数据结构中,以便在运行时调用。优化性能、代码重用、测...
      99+
      2024-04-12
      c++ 函数指针 typedef
    • C++ 函数的指针参数的使用场景有哪些?
      c++++ 函数指针参数的使用场景是:回调函数:将函数传递给其他函数作为回调,以便在某些事件发生时调用。事件处理:使用事件分发系统处理来自不同源的事件。算法排序:使用函数指针作为比较函数...
      99+
      2024-04-20
      函数指针 参数传递 c++
    • C++函数指针的用法详解
      目录C++函数指针详细理解函数指针初识函数指针作为形参使用函数指针作为返回值练习总结C++函数指针详细理解 函数指针初识 函数指针是指向函数的指针,并不等于函数,它能够执行函数的操作...
      99+
      2024-04-02
    • C++ 函数指针的优势和局限性有哪些?
      函数指针的优势包括:灵活性、代码重用、回调函数、事件处理。局限性包括:类型安全性、内存管理、运行时开销。实战案例:定义函数指针类型,创建指向比较函数的函数指针,调用函数指针比较两个数字。...
      99+
      2024-04-17
      c++ 函数指针 typedef
    • c++函数名指针和函数指针
      目录前言例 1例 2例 3前言 我们先来看一下函数指针式如何定义的,假如我们有一个函数int fun(int){…};那么他对应的函数指针写法就应该是int (*p)(...
      99+
      2024-04-02
    • 函数指针在 C++ 函数式编程中的应用场景有哪些?
      函数指针在 c++++ 函数式编程中主要用于:高阶函数:接收或返回函数的函数。匿名函数:通过 lambda 表达式创建的函数。回调函数:在其他函数执行时调用的函数。 函数指针在 C++...
      99+
      2024-04-17
      c++ 函数指针
    • C++ 函数指针在虚拟方法和虚表中的应用有哪些?
      c++++ 函数指针在虚拟方法中用于存储指向派生类重写方法实现的指针,在虚表中用于初始化虚表并存储指向虚拟方法实现的指针,从而实现运行时多态,允许派生类重写基类中的虚拟方法,并根据运行时...
      99+
      2024-04-17
      c++ 函数指针 虚方法 虚表
    • C语言指针数组和数组指针的区别有哪些
      这篇“C语言指针数组和数组指针的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针数组和数组指针的区别有哪些...
      99+
      2023-07-04
    • C++中函数指针有什么用
      这篇文章主要为大家展示了“C++中函数指针有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++中函数指针有什么用”这篇文章吧。1、函数指针函数指针顾名思义,就是指向函数的指针。和数据类似...
      99+
      2023-06-25
    • C++ 函数指针作为函数指针参数
      c++++ 中函数指针作为参数允许动态调用函数,语法是 typedef 返回类型 (*函数指针名)(参数列表);。函数指针可用作其他函数的参数,例如 apply_function(int...
      99+
      2024-04-14
      c++ 函数指针 typedef
    • C指针的使用技巧有哪些
      这篇文章主要讲解了“C指针的使用技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C指针的使用技巧有哪些”吧!1. 开胃菜:修改主调函数中的数据//&...
      99+
      2024-04-02
    • C++的函数与指针
      目录函数与指针指针作函数的参数-实现地址传递返回指针的函数指向函数的指针变量总结函数与指针 一个函数在编译时被分配一个入口地址,这个入口地址就称为函数的指针。在C++中, 函数名代表...
      99+
      2024-04-02
    • C++ 中函数指针的定义和用法
      c++++ 中的函数指针是指向函数的变量,允许将函数作为参数传递。使用函数指针可以通过定义它们,将函数名或 lambda 表达式赋给它们,并像调用普通函数一样调用它们。函数指针广泛应用于...
      99+
      2024-04-13
      c++ 函数指针
    • C/C++指针知识点有哪些
      本篇内容介绍了“C/C++指针知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础部分关于内存内存含义:存储器:计算机的组成中,用...
      99+
      2023-06-03
    • C++的引用和指针有哪些区别
      本篇内容主要讲解“C++的引用和指针有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的引用和指针有哪些区别”吧!引用和指针有如下三种区别:1 引用必须在声明时初始化,而指针不用;2...
      99+
      2023-06-17
    • python函数函数指针用法
      函数指针,主要用于向函数中传递一个函数名用该函数名(即函数指针)可以进行动态策略执行。 下面是一个python版本的函数指针用法 def minus(a, b): return a - b def compute(a, b , ...
      99+
      2023-01-31
      函数 指针 python
    • C语言中怎么使用指针函数和函数指针
      本篇内容介绍了“C语言中怎么使用指针函数和函数指针”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、指针函数当一个函数声明其返回值为一个指针...
      99+
      2023-06-16
    • C++ 函数的指针参数的用途
      c++++ 함수의 포인터 매개 변수를 사용하면 함수 동작을 보다 유연하게 만들 수 있습니다. 포인터 매개 변수는 함수의 입력으로 사용되며 함수에 동적 변경성을 제공합니...
      99+
      2024-04-20
      c++ 函数指针
    • 在php中数组指针的操作函数有哪些
      这篇文章主要介绍“在php中数组指针的操作函数有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在php中数组指针的操作函数有哪些”文章能帮助大家解决问题。有8种数组指针操作函数:1、curren...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作