函数指针 如:void (*oper)(ChainBinTreee *p)

  在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();
其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。
例如:
int (*pf)();
表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
【例】本例用来说明用指针形式实现对函数调用的方法。
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}

从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:
1) 先定义函数指针变量,如后一程序中第9行 int (*pmax)();定义 pmax为函数指针变量。
2) 把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max;
3) 用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y);
4) 调用函数的一般形式为:
(*指针变量名) (实参表)
使用函数指针变量还应注意以下两点:
a) 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。
b) 函数调用中"(*指针变量名)"的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。
 
 

在《C陷阱与缺陷》中有这样一段描述:

fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp)()就是调用该函数的方式。ANSI C标准允许程序员将上式简写为fp(),但是一定要记住这种写法只是一种简写形式。

转载于:https://www.cnblogs.com/rednodel/p/4047660.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘检测中非极大值抑制简单解释

首先要明白的是: (a.) canny算子中非最大抑制(Non-maximum suppression)是回答这样一个问题: “当前的梯度值在梯度方向上是一个局部最大值吗?” 所以,要把当前位置的梯度值与梯度方向上两侧的梯度值进行比较. (b.) 梯度方向垂直于边缘方向, 这一点不要误解. - Q1: 插值…

哥德尔不完备定理”到底说了些什么?

来源:人机与认知实验室(一)【中文网上深入介绍哥德尔不完备定理的文章很少,我这篇文章写得很长,花了不少时间打磨它,希望能帮助到爱好数学与逻辑的人。文章把理解哥德尔不完备定理分为了五重,建…

背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)

以背景黑色,透明度0.5举例为大家详细介绍下关于背景透明,文字不透明的最佳方法同时兼容IE,具体实现如下,感兴趣的朋友可以参考下哈希望对大家有所帮助以背景黑色,透明度0.5举例 非IE:background:rgba(0,0,0…

关于相机标定的简单介绍

关于Opencv实现的代码,参考: https://blog.csdn.net/dcrmg/article/details/52939318 - 相机从生产出厂时,存在一些难以避免的畸变。这种镜头畸变可以通过矫正来达到最佳的拍摄效果。标定板要拍摄不同角度的20张照片,是因为镜头…

谷歌Waymo自建车厂,L4级无人车量产指日可待

来源:AI科技大本营摘要:现在,Waymo 宣称世界上第一家 100% 致力于大规模生产 L4 自动驾驶汽车的工厂,即将诞生。美国当地时间 1 月 22 日,Google 旗下无人驾驶公司 Waymo 宣布,在未来五年内&…

java 使用json-lib 对象,String,json互转

所使用的包: commons-beanutils.jar commons-collections-3.1.jar commons-lang.jar commons-logging-1.1.3.jar ezmorph-1.0.jar json-lib-2.2.2-jdk15.jar 先看json和String的互转 User.java user对象 package test;public class User {String id;String name;i…

VS2013中CUDA的配置

参考一下博客: https://www.cnblogs.com/br170525/p/8325842.html 和 https://blog.csdn.net/tiemaxiaosu/article/details/52856495

腾讯“科学探索奖”提名报名正式启动

科学探索奖“申报指南”记者1月23日从腾讯公司获悉,由腾讯基金会联合杨振宁等众多知名科学家发起的“科学探索奖”提名报名正式启动。这标志着腾讯基金会这一投入10亿元发起的民间科学大奖正式拉开帷幕。按照科学探索奖官方网站提供的“申报指南”,该奖的…

Opencv数据符号说明

在openCV中常常会使用CV_32UC1等相似的字符,这里简单说明含义,作为备忘录。 标识含义 CV_表示是openCV中的宏定义。32是指这个数据是一个32位数据,相同的还有8,16,64三种。U是unsigned的首字母,代表最高位表示计数,而…

语音公司集体杀入AI芯片 2019场景落地战打响!

来源:智东西摘要:近十家语音公司集体搞芯片!为什么杀红了眼,谁又能笑到最后?2019年的第一个工作日,在第一颗AI芯片“雨燕”落地不久,AI创业公司云知声紧锣密鼓地推出多模态AI芯片战略&#xff0…

[原创]VS2013 EF6连接MySql需要几步?

精简的美丽...... 1.安装mysql server下载地址 http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-winx64.zip注意:此url中除去文件名的部分是几乎所有文件下载的路径下面的文章可以借鉴 【MySQL】教你一步一步在Windows 8.1系统上配置免安装版mysql-5.6.21-…

Opencv中Mat的data数据只定义为uchar*类型,

opencv中Mat的数据定义为指向uchar 的指针,而构造函数又提供了许多其他类型。 其实数据在内存中是一维存储的,而图像基本结构是二维的,3D图像还会是三维的;同时,彩色图像还有多个channel(通道)…

任总讲话,说明华为对5G有清醒的认识

来源:科工力量摘要:无线通信产业已经发展了四代,目前正处于5G产业化前夕,是当下到一个最热的话题,5G如何发展,前景如何,是各个方面包括学术界、产业界、投资界以及政府都非常关心的。另外&#…

mysql 其他引擎

待补充转载于:https://www.cnblogs.com/mjorcen/p/4064037.html

Opencv和C++实现canny边缘检测

Canny边缘检测主要包括: 图像的灰度化;图像的高斯滤波,来平滑图像,同时消除和降低图像噪声的影响;计算出每一个像素点位置的梯度(X方向梯度、Y方向梯度、已经该点的梯度幅值)和方向角度&#x…

这些机器人决定全球机器人未来趋势·Science Robotics 评选年度十大机器人

来源:机器人大讲堂摘要:如果评选机器人领域最高端的学术杂志,那应该非《Science Robotics》莫属了。作为顶级期刊Science的子刊,一经问世便受到机器人界各位学术大牛的青睐,令人咋舌的前沿科技层出不穷。最近&#xff…

C#语言之“中英文混合字符串对齐”的方法

参考自:(1)http://www.cnblogs.com/cnluoke/articles/1213398.html (2)http://www.cnblogs.com/sql4me/archive/2009/11/16/1603996.html 方法一:将已有字符串组织成新字符串时填充 由于某一个字段&#xf…

计算机视觉三大顶级会议ICCV,CVPR,ECCV网址

ICCV网址如下: http://www.informatik.uni-trier.de/~ley/db/conf/iccv/index.html ECCV网址如下: http://www.informatik.uni-trier.de/~ley/db/conf/eccv/index.html CVPR网址如下: http://dblp.uni-trier.de/db/conf/cvpr/index.html 可以找到代码的 利用传统方法的视频…

2019年社交媒体趋势报告

来源:新媒体创意营销Kantar Media发布了新报告“2019年社交媒体趋势”。世界上40%的人口使用社交媒体。一些行业报告显示人们平均每天花两小时在这些平台上分享、点赞、发推和更新,那么2019年会怎样呢?第五个年度社交媒体趋势报告强调了该领域…

卡特兰数列编程实现

卡特兰(Catalan)数列典型特征有一类如下: 1. 可以分为两列 2. 每行从左向右依次递增(减),每列从上向下依次递增(减) /* 2-10 标准二维表问题 问题为:设n是一个正整数。2*n的标准二维表是由正…