博客
关于我
函数指针
阅读量:315 次
发布时间:2019-03-04

本文共 1877 字,大约阅读时间需要 6 分钟。

函数指针详解

函数指针在程序开发中扮演着重要角色,尤其是在需要动态调用函数或传递函数作为参数时。本文将从基础到应用,全面解析函数指针的使用方法。

1. 函数指针的基础

函数指针与其他指针一样,用于存储函数在内存中的地址。与对象指针不同,函数指针指向的是函数的代码段,而非数据段。函数指针的类型由函数的返回类型和形参类型决定,与函数名无关。

2. 函数指针的声明

函数指针的声明通常使用*符号表示指针。例如,以下声明表示lengthCompare函数返回bool类型,接受两个const string&型参数:

bool lengthCompare(const string &, const string &);

函数指针的声明方式有多种:

  • 使用通用指针类型
    bool (*pf)(const string &, const string &);
  • 使用类型别名
    using F = int(int *, int);
  • 使用typedef定义函数指针
    typedef decltype(lengthCompare) *FuncP;
  • 使用别名来定义函数指针
    typedef bool Func(const string &, const string &);
  • 3. 函数指针的初始化

    函数指针的初始化需要明确指向具体的函数。以下是常见的方法:

  • 直接赋值
    pf = lengthCompare;
  • 使用引用传递
    pf = &lengthCompare;
  • 初始化为零指针
    pf = 0;
  • 4. 函数指针的调用

    函数指针的调用需要严格遵守参数和返回类型的匹配规则。以下是几种常见的调用方式:

  • 直接调用
    bool b1 = pf("hello", "goodbye");
  • 使用间接调用( dereference operator )
    bool b2 = (*pf)("hello", "goodbye");
  • 直接调用原函数
    bool b3 = lengthCompare("hello", "goodbye");
  • 5. 函数指针的重载

    函数指针在函数重载时起着重要作用。编译器通过函数指针的类型来决定调用哪个函数。以下示例展示了如何使用函数指针进行重载:

    void ff(int *);void ff(unsigned int);void (*fn)(unsigned int) = ff;

    6. 函数指针的形参

    函数指针的形参不支持直接定义函数类型,必须像数组一样进行转换。以下是典型的调用方式:

    void useBigger(const string &s1, const string &s2, bool pf(const string &, const string &));void useBigger(const string &s1, const string &s2, bool (*pf)(const string &, const string &));

    7. 类型别名的使用

    类型别名是定义函数指针类型的重要工具。以下是几种常见的类型别名定义方式:

  • 定义函数类型
    typedef bool Func(const string &, const string &);
  • 使用decltype定义函数类型
    typedef decltype(lengthCompare) Func2;
  • 定义函数指针类型
    typedef bool (*FuncP)(const string &, const string &);
  • 结合decltype和typedef定义函数指针
    typedef decltype(lengthCompare) *FuncP2;
  • 8. 返回函数指针

    有时我们需要将函数返回类型设置为函数指针。以下是一些常见的做法:

  • 使用using声明
    using F = int(int *, int);F *f1(int);
  • 直接定义返回类型
    PF f1(int);
  • 结合返回类型和函数名
    int (*f1(int))(int *, int);
  • 使用尾置返回类型
    auto f1(int) -> int(*)(int *, int);
  • 使用decltype简化返回类型
    decltype(lengthCompare) *f1(const string &s1, const string &s2);
  • 通过以上方法,我们可以灵活地处理函数指针的使用。函数指针为程序提供了更高的灵活性和可扩展性,是现代程序员的重要工具。

    转载地址:http://hkpq.baihongyu.com/

    你可能感兴趣的文章
    php生成二维码到图片上
    查看>>
    php生成二维码并下载图片(适应于框架)
    查看>>
    PHP线程安全和非线程安全
    查看>>
    php缃戠珯,www.wfzwz.com
    查看>>
    php编写TCP服务端和客户端程序
    查看>>
    php编码规范
    查看>>
    PHP编码规范-PSR1、psr2 /psr3 psr4
    查看>>
    PHP编程效率的20个要点
    查看>>
    PHP网页缓存技术优点及代码
    查看>>
    php自定义函数: 文件大小转换成智能形式
    查看>>
    php英语单词,php常用英语单词,快速学习php编程英语(6)
    查看>>
    R3.4.0安装包时报错“需要TRUE/FALSE值的地方不可以用缺少值”,需升级到R3.5.0
    查看>>
    PHP获取curl传输进度
    查看>>
    PHP获取IP所在地区(转)
    查看>>
    PHP获取IP的方法对比
    查看>>
    php获取json里面内容
    查看>>
    PHP获取图片宽度高度、大小尺寸、图片类型、用于布局的img属性
    查看>>
    PHP获取当前时间、时间戳的各种格式写法汇总
    查看>>
    php获取文件夹中文件的两种方法
    查看>>
    R2学习记录
    查看>>