函数指针和函数类型

  • 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。
  • 函数类型由它的返回值和参数类型决定,与函数名无关。
bool length_compare(const string &, const string &);

上述函数类型是:bool (const string &, const string &);
上述函数指针pf:bool (*pf)(const string &, const string &);

使用函数指针

  • 当把函数名作为一个值使用时,该函数自动的转换成指针,如:
pf = length_compare <=>等价于
pf = &length_compare

函数指针形参

  • 函数类型不能定义为形参,但是形参可以是指向函数的指针;
  • 函数作为实参使用时,会自动的转换成函数指针;

    typedef bool Func(const string &, const string &) // Func是函数类型;
    typedef bool (*FuncP)(const string &, const string &) // FuncP是函数指针类型;
    typedef decltype(length_compare) Func2  // Func2是函数类型;
    typedef decltype(length_compare) *Func2P // Func2是函数指针类型;

    注意decltype(length_compare)返回的是函数类型,而不是函数指针类型;

using FTtype = int(int,int); //函数类型
typedef int (*pf)(int, int); //函数指针int func(int a, int b){return a+b;}
void print(int a, int b, FTtype fn){// 编译器将其隐式转化成函数指针cout << fn(a,b) << endl;
}int main()
{print(1,2,func);cout << typeid(FTtype).name() << endl;  // FiiiEcout << typeid(func).name() << endl;    // FiiiEcout << typeid(decltype(func)).name() << endl;  // FiiiEcout << typeid(pf).name() << endl;  // PFiiiEreturn 0;
}
  • 下面两个声明语句是同一个函数,因为编译器会自动的将FTtype 转换成函数指针类型。

    void print(int a, int b, FTtype fn);
    void print(int a, int b, pf fn);

返回指向函数的指针

虽然不能返回一个函数,但是能返回执行函数类型的指针。和函数参数不同,编译器不会自动地将函数返回类型当作指针类型处理,必须显示的将返回类型指定为指针。如:

using F = int(int*, int);
using PF = int(*)(int*,int);
F  f1(int);    //错误: F是函数类型
PF  f1(int);   //正确: PF是函数指针类型

f1也可以写出下面两种形式:

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

C++ 函数指针和函数类型相关推荐

  1. 函数指针和函数指针类型

    参考:https://blog.csdn.net/candyliuxj/article/details/6339414 函数指针 1.     定义 每一个函数都占用一段内存单元,它们有一个起始地址, ...

  2. C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

    1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针 ...

  3. 函数指针和函数指针数组及其应用

    1. 函数指针 先来看一个简单的例子: int a=3; void *p=&a; 这是一个基础的不能再基础的例子.相信学过指针的都能看得懂.P是一个指针,指向a.a 是一个整形变量.函数指针和 ...

  4. C++函数指针和函数重载

    函数重载与函数指针    当使⽤用重载函数名对函数指针进⾏行赋值时    根据重载规则挑选与函数指针参数列表⼀致的候选者    严格匹配候选者的函数类型与函数指针的函数类型 方法一: // 声明一个函 ...

  5. 【转】回调函数,函数指针与函数对象

    原文出处:http://shudingbo.spaces.live.com/blog/cns!C33400475B08F157!423.entry?wa=wsignin1.0&sa=24651 ...

  6. 函数指针 回调函数 面向对象风格的C语言

    这篇文章的所有代码都是用C实现的,这是由于C没有面向对象的特性,所以我希望用函数指针把C的结构体弄得有一点面向对象的感觉. 先介绍函数指针.回调函数,然后用C结合回调函数实现一个有面向对象风格的链表 ...

  7. C语言——指针函数和函数指针(回调函数)

    前言:之前说了很多跟数组和指针相关的东西,这次从模块化编程降低耦合度的角度说下函数和指针的关系. 1. 指针函数   指针函数就是返回指针的函数.函数的返回类型有很多,void,int,char等都是 ...

  8. 函数指针,函数指针数组,函数返回值为函数指针

    函数的名字就是函数的首地址:定义函数指针; int (*p)(int )     p为函数指针变量名字,int 为函数的返回值类型为int型:(int)为函数的形参类型为int型, 注:因为优先级所以 ...

  9. 函数指针、函数返回指针、const指针、指向const指针,指向const的const指针。

    ①函数指针 函数指针是指向函数的指针变量. 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所 ...

最新文章

  1. 大数加法【HDU 1002】
  2. 索引和长度必须引用该字符串内的位置--ArgumentOutOfRangeException
  3. 注解_案例_简单的测试框架
  4. 进击的数据中台,企业数字化转型的新引擎
  5. Tomcat 5.0.18 安装配置指南
  6. [Node.js] mySQL数据库 -- 英雄管理系统(完善)
  7. 法向量 点云pca_CVPR 2019 | 旷视研究院Oral论文提出GeoNet:基于测地距离的点云分析深度网络...
  8. flutter: 建树流程
  9. 如何得到所有子对象_对象可能会迟到,但它永远不会缺席
  10. 计算机科学与技术a类学科,清华大学a类学科有哪些?附清华a类学科名单
  11. apereo cas mysql_史上最详细的 Apereo CAS 5.3开发教程:二、Apereo CAS 5.3 Server环境搭建,登录名,密码从数据库中获取...
  12. ST-Link驱动安装不正确,设备管理器黄色感叹号,win10安装stlink驱动
  13. 苹果手机连接服务器传输文件,iOS 设备实现wifi局域网传输文件到iphone
  14. java 计算正态分布_统计基本概念 期望 方差 均方差 正态分布 Java统计计算
  15. div+css静态网页设计——男女装商城-功能齐全(40页) HTML+CSS+JavaScript 大学生网店作品 商城网页设计作业模板 学生网页制作源代码下载
  16. java PDF模板生成并导出(文字、表格、图片)
  17. Shipyard远程API
  18. magento 模块化开发_Magento中的PayPal信用卡令牌化
  19. Latex、如何将word中的表格转换为Latex代码
  20. c语言syslog日志记录

热门文章

  1. 21年UI自动化面试
  2. python车辆测速视频车速检测
  3. Windows 2000 安全
  4. sqlserver 分组合并列_夺冠!中国队国际奥数大赛再称雄,满分选手已保送清华姚班,“中国二队”并列第一...
  5. 解决IE错误,简单修复IE
  6. 软件测试模型比较(V模型、W模型、H模型、X模型、前置模型)
  7. 只能上QQ不能打开网页的几个原因及解决方法
  8. 2018中小学生 计算机比赛,【2018全国中小学生创新作文大赛官网】_2018年第十五届全国中小学生创新作文大赛的通知...
  9. leetcode_205. 同构字符串
  10. 【计算机毕业设计】学生考勤管理