指针函数到函数指针作为函数的返回值
转载自:https://www.cnblogs.com/yangjiquan/p/11465376.html
首先说一下指针函数:
1.指针函数的定义
顾名思义,指针函数即返回指针的函数。其一般定义形式如下:
类型名 *函数名(函数参数表列);
其中,后缀运算符括号"()"表示这是一个函数,其前缀运算符星号"*"表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个"指向返回值为…的指针(地址),"类型名"表示函数返回的指针指向的类型"。
"(函数参数表列)"中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下:
int *pfun(int, int);
由于"*"的优先级低于"()"的优先级,因而pfun首先和后面的"()"结合,也就意味着,pfun是一个函数。即:
int *(pfun(int, int));
接着再和前面的"*"结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。
我们不妨来再看一看,指针函数与函数指针有什么区别?
int (*pfun)(int, int);
通过括号强行将pfun首先与"*"结合,也就意味着,pfun是一个指针,接着与后面的"()"结合,说明该指针指向的是一个函数,然后再与前面的int结合,也就是说,该函数的返回值是int。由此可见,pfun是一个指向返回值为int的函数的指针。
虽然它们只有一个括号的差别,但是表示的意义却截然不同。函数指针的本身是一个指针,指针指向的是一个函数。指针函数的本身是一个函数,其函数的返回值是一个指针。
2. 用函数指针作为函数的返回值
在上面提到的指针函数里面,有这样一类函数,它们也返回指针型数据(地址),但是这个指针不是指向int、char之类的基本类型,而是指向函数。对于初学者,别说写出这样的函数声明,就是看到这样的写法也是一头雾水。比如,下面的语句:
int (*ff(int))(int *, int);
我们用上面介绍的方法分析一下,ff首先与后面的"()"结合,即:
int (*(ff(int)))(int *, int); // 用括号将ff(int)再括起来
也就意味着,ff是一个函数。
接着与前面的"*"结合,说明ff函数的返回值是一个指针。然后再与后面的"()"结合,也就是说,该指针指向的是一个函数。
这种写法确实让人非常难懂,以至于一些初学者产生误解,认为写出别人看不懂的代码才能显示自己水平高。而事实上恰好相反,能否写出通俗易懂的代码是衡量程序员是否优秀的标准。一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:
int (*PF)(int *, int);
也就是说,PF是一个函数指针"变量"。当使用typedef声明后,则PF就成为了一个函数指针"类型",即:
typedef int (*PF)(int *, int);
这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:
PF ff(int);
指针函数到函数指针作为函数的返回值相关推荐
- MATLAB中如何忽略函数中前几个不需要的返回值而只取需要的返回值,例如:只取函数第二个返回值,而忽略第一个返回值
1 致谢 感谢网友honglei.chen的回答, 原文链接如下: https://www.ilovematlab.cn/thread-203269-1-1.html 2 前言 今天在学习神经网络算法 ...
- C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)
菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序[结构性]更好,更容易维护.而函数就是C语言结构化的一种手段. 函数可以将大的计算任务划分为多个较小的任务(解耦 ...
- 深入理解PHP内核(十二)函数-函数的定义、传参及返回值
原文链接:http://www.orlion.ga/344/ 一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; } 1 ...
- Python 函数参数有冒号 声明后有- 箭头 返回值注释 参数类型注释
在python3.7 环境下 函数声明时能在参数后加冒号,如图: 1 def f(ham: str, eggs: str = 'eggs') -> str : 2 print("Ann ...
- 使用钩子函数[4] - 钩子链和 CallNextHookEx 的返回值
SetWindowsHookEx 函数的第一个参数表示钩子类型, 共有 14 种选择, 前面我们已经用过两种: WH_KEYBOARD.WH_MOUSE. 系统会为每一种类型的钩子建立一个表(那就是 ...
- Mysql函数示例(如何定义输入变量与返回值)
Mysql 函数示例 简介 基于mysql实现函数的编写,如何定义输入变量,如何定义和使用返回值等. 获取男女信息 --1 获取男女信息 CREATE FUNCTION getGender(idcar ...
- python冒号声明类型_Python 函数参数有冒号 声明后有- 箭头 返回值注释 参数类型注释...
在python3.7 环境下 函数声明时能在参数后加冒号,如图: 1 def f(ham: str, eggs: str = 'eggs') -> str : 2 print("Ann ...
- python学习之路---函数:定义def、调用、返回值return、参数说明、参数陷阱
#函数 #可读性强,复用性强 #函数定义:定义了之后,可以在任何需要的地方调用 #格式: def 函数名(): 例子:def mylen(): # 没有返回长度,只能单纯的打印 # return 返回 ...
- js错误集锦 函数在一个map循环遍历中进行返回值返回 结果在调用该函数时收不到返回值
错误代码: superviseFilter = () => {let company = this.props.cooperativeState.allCompanyif(this.state. ...
- python调用自定义函数返回值的类型_生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)...
工具:VS2010 python2.7 (若使用的python是64位的,生成的dll也要使用x64) 系统:win7pro 64bit 首先,dll工程的创建以及dll文件的生成: new p ...
最新文章
- 小米输掉官司,倒打一耙不如坦然认错
- php 静态方法继承,php 5.2中的类继承:重写扩展类中的静态变量?
- [转] 《完美程式设计指南》Effective Delphi
- html动画效果结束返回,javascript判断css3动画结束 css3动画结束的回调函数
- C语言学习笔记(1)--基本概念和函数用法
- Android Studio 在res中新建文件夹不显示
- PyTorch 1.2 中文文档校对活动 | ApacheCN
- DisplayX显示器测试、显示器屏幕检测
- 【三维路径规划】基于matlab A_star算法机器人栅格地图三维路径规划【含Matlab源码 190期】
- 正态分布是离散分布还是连续分布_简单统计学|正态分布之连续数据的概率分布...
- Unity - Timeline 之 Timeline window(Timeline窗口)
- python模型保存与恢复_tensorflow1.0学习之模型的保存与恢复(Saver)
- (六十二)基于logistic回归的信用评级和分类模型评估
- Python下载网易云音乐(云音乐飙升榜)
- expected 3 got 2 错误提示
- sys.path.append方法
- 【服务器数据恢复】服务器卷被误删除的raid5数据恢复案例
- FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
- java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...
- 区块链量化投资系列课程(4) - 动态平衡策略
热门文章
- sublime解决乱码问题
- bitwarden密码管理和搭建服务说明
- 计算机二手配件,电脑二手零件那些值得买,哪些不值得买?买二手零件要注意些啥?...
- 新闻类应用后台耗电大调查!哪个应用最省电?
- docker简介和安装(阿里云加速)以及Springboot项目部署docker,实现局域网下同时访问项目(详细过程)
- windows 查看端口 进程
- ILRuntime 使用教程
- 计算机电脑操作员培训计划,计算机操作员培训计划..doc
- mate拆机换屏教程
- kafka java jvm 优化_kafka优化–JVM参数配置优化