C++ 函数指针和函数类型
函数指针和函数类型
- 函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。
- 函数类型由它的返回值和参数类型决定,与函数名无关。
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++ 函数指针和函数类型相关推荐
- 函数指针和函数指针类型
参考:https://blog.csdn.net/candyliuxj/article/details/6339414 函数指针 1. 定义 每一个函数都占用一段内存单元,它们有一个起始地址, ...
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针 ...
- 函数指针和函数指针数组及其应用
1. 函数指针 先来看一个简单的例子: int a=3; void *p=&a; 这是一个基础的不能再基础的例子.相信学过指针的都能看得懂.P是一个指针,指向a.a 是一个整形变量.函数指针和 ...
- C++函数指针和函数重载
函数重载与函数指针 当使⽤用重载函数名对函数指针进⾏行赋值时 根据重载规则挑选与函数指针参数列表⼀致的候选者 严格匹配候选者的函数类型与函数指针的函数类型 方法一: // 声明一个函 ...
- 【转】回调函数,函数指针与函数对象
原文出处:http://shudingbo.spaces.live.com/blog/cns!C33400475B08F157!423.entry?wa=wsignin1.0&sa=24651 ...
- 函数指针 回调函数 面向对象风格的C语言
这篇文章的所有代码都是用C实现的,这是由于C没有面向对象的特性,所以我希望用函数指针把C的结构体弄得有一点面向对象的感觉. 先介绍函数指针.回调函数,然后用C结合回调函数实现一个有面向对象风格的链表 ...
- C语言——指针函数和函数指针(回调函数)
前言:之前说了很多跟数组和指针相关的东西,这次从模块化编程降低耦合度的角度说下函数和指针的关系. 1. 指针函数 指针函数就是返回指针的函数.函数的返回类型有很多,void,int,char等都是 ...
- 函数指针,函数指针数组,函数返回值为函数指针
函数的名字就是函数的首地址:定义函数指针; int (*p)(int ) p为函数指针变量名字,int 为函数的返回值类型为int型:(int)为函数的形参类型为int型, 注:因为优先级所以 ...
- 函数指针、函数返回指针、const指针、指向const指针,指向const的const指针。
①函数指针 函数指针是指向函数的指针变量. 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所 ...
最新文章
- 大数加法【HDU 1002】
- 索引和长度必须引用该字符串内的位置--ArgumentOutOfRangeException
- 注解_案例_简单的测试框架
- 进击的数据中台,企业数字化转型的新引擎
- Tomcat 5.0.18 安装配置指南
- [Node.js] mySQL数据库 -- 英雄管理系统(完善)
- 法向量 点云pca_CVPR 2019 | 旷视研究院Oral论文提出GeoNet:基于测地距离的点云分析深度网络...
- flutter: 建树流程
- 如何得到所有子对象_对象可能会迟到,但它永远不会缺席
- 计算机科学与技术a类学科,清华大学a类学科有哪些?附清华a类学科名单
- apereo cas mysql_史上最详细的 Apereo CAS 5.3开发教程:二、Apereo CAS 5.3 Server环境搭建,登录名,密码从数据库中获取...
- ST-Link驱动安装不正确,设备管理器黄色感叹号,win10安装stlink驱动
- 苹果手机连接服务器传输文件,iOS 设备实现wifi局域网传输文件到iphone
- java 计算正态分布_统计基本概念 期望 方差 均方差 正态分布 Java统计计算
- div+css静态网页设计——男女装商城-功能齐全(40页) HTML+CSS+JavaScript 大学生网店作品 商城网页设计作业模板 学生网页制作源代码下载
- java PDF模板生成并导出(文字、表格、图片)
- Shipyard远程API
- magento 模块化开发_Magento中的PayPal信用卡令牌化
- Latex、如何将word中的表格转换为Latex代码
- c语言syslog日志记录
热门文章
- 21年UI自动化面试
- python车辆测速视频车速检测
- Windows 2000 安全
- sqlserver 分组合并列_夺冠!中国队国际奥数大赛再称雄,满分选手已保送清华姚班,“中国二队”并列第一...
- 解决IE错误,简单修复IE
- 软件测试模型比较(V模型、W模型、H模型、X模型、前置模型)
- 只能上QQ不能打开网页的几个原因及解决方法
- 2018中小学生 计算机比赛,【2018全国中小学生创新作文大赛官网】_2018年第十五届全国中小学生创新作文大赛的通知...
- leetcode_205. 同构字符串
- 【计算机毕业设计】学生考勤管理