C++笔记 指针函数与函数指针详解

1.指针函数

指针函数,从名字上看它本质上是一个函数。

指针函数:返回值类型是指针的函数。函数声明如下:


int *plusfunction(int a,int b);

当然也可以写成如下格式:


int* plusfunction(int a,int b);

指针标志 * 与int  紧贴在一起,而与函数名f间隔开,这样看起来就明了些了,plusfunction是函数名,返回值类型是一个int类型的指针。

指针函数就是一个普通的函数,普通到仅仅是因为它的函数返回值是指针而已。这和上面那个函数唯一的区别就是在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。

//指针函数,从名字上看它本质上是一个函数。
//指针函数:返回值类型是指针的函数。#include <stdio.h>
#include <stdlib.h>
int* plusfunction(int a, int b);
int main()
{int *p = NULL;p = plusfunction(1, 2);printf("*p is %d\n", *p);free (p);system("pause");return 0;
}int* plusfunction(int a, int b)
{int *p = (int *)malloc(sizeof(int));*p = a + b;return  p;
}

 

不过我有个疑问,使用指针函数,和函数入参是指针,这两者对比使用,第一种方法有什么好处呢???

下面展示函数入参是指针

#include <stdio.h>
#include <stdlib.h>
void plusfunction(int a, int b, int *p);
int main()
{int *p = NULL;p = (int *)malloc(sizeof(int));plusfunction(1, 8, p);printf("*p is %d\n", *p);free(p);system("pause");return 0;
}void plusfunction(int a, int b, int *p)
{*p = a + b;
}

 

 

这样执行也是没问题的啊,日常开发中,我还真没找到指针函数的“优点”,让我觉得某个功能必须用指针函数实现,或用指针函数实现后代码更整洁,提高代码可读性。

2.函数指针

函数指针,本质上他是一个指针,并不是一个函数。在C语言中有些概念是一脉相承的。

函数指针说的就是一个指针,但这个指针指向的是函数,不是普通的基本数据类型或者类对象。函数指针定义如下:


int (*f)(int a,int b);//声明函数指针

和指针函数的定义对比可以看到,

函数指针与指针函数的最大区别是函数指针的函数名是一个指针,即函数名前面有一个指针类型的标志型号“*”。

注意指针函数与函数指针表示方法的不同,千万不要混淆。

最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。

当然,函数指针的返回值也可以是指针。


#include <stdio.h>
void MyFun(int a);
int main()
{MyFun(10);return(0);
}
void MyFun(int a)
{printf("a is %d\n",a);
}

 

 

#include <stdio.h>
#include<stdlib.h>
void MyFun(int a);
int main()
{(*MyFun)(10);system("pause");return 0;
}
void MyFun(int a)
{printf("a is %d\n", a);
}

这个代码是正常运行的,也就是说(*MyFun)(10);和MyFun(10);是一样的,在教材和资料中,都会讲到数组名就是指向数组第一个数据的常量指针。从上面例子看到,函数名貌似也是“常量指针”


#include <stdio.h>
#include<stdlib.h>
void MyFun(int a);// 这个声明也可写成:void MyFun( int )
void(*FunP)(int);//也可声明成void(*FunP)(int x),但习惯上一般不这样。 
int main()
{FunP = MyFun;(*FunP)(100);system("pause");return 0;
}
void MyFun(int a)
{printf("a is %d\n", a);
}

  

 

 

#include <stdio.h>
#include<stdlib.h>
void MyFun(int a);// 这个声明也可写成:void MyFun( int )
void(*FunP)(int);//也可声明成void(*FunP)(int x),但习惯上一般不这样。 
int main()
{FunP = MyFun;FunP(100);system("pause");return 0;
}
void MyFun(int a)
{printf("a is %d\n", a);
}

是的,将FunP前面的*号拿掉也是可以运行的,上面的示例代码就是函数指针在C语言中的最常见形态。之前的例子只是为了让你更能理解函数指针,实际开发中只需要用函数指针的最终,最常见的形态即可。

不然代码中出现之前的形式,其他程序员并不是很熟悉,就成了“骚操作”,虽然不影响运行,但是降低代码的可阅读性。

既然函数指针变量是一个变量,当然也可以作为某个函数的参数来使用的。所以,你还应知道函数指针是如何作为某个函数的参数来传递使用的。

回调函数(以函数指针为参数的函数)

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

函数指针的定义及使用

1、定义 函数的本质&#xff1a;一段内存中的代码&#xff0c;占用一片连续内存 函数体起始位置&#xff0c;用于函数调用时的跳转。 函数名&#xff1a;函数体代码的起始地址&#xff0c;即函数的入口地址 数组名&#xff1a;数组的起始地址&#xff0c;即第0个元素的地址 函…

详解函数指针和类成员函数指针

作者&#xff1a;倾夜陨灭星尘 一&#xff0e;什么是函数指针&#xff1f; 函数指针&#xff0c;顾名思义即指向函数的指针。 如果要问&#xff0c;为什么能用一个指针指向一个函数呢&#xff1f;我觉得要理解这个问题&#xff0c;以及要理解后面的函数指针和类成员函数指针…

函数指针和指针函数

1. 函数指针 如果在程序中定义了一个函数&#xff0c;那么在编译时系统就会为这个函数代码分配一段存储空间&#xff0c;这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。 既然是地址我们就可以定义一个指针变量来存放&#xff0c;这个指针变量…

【C++】引用 - 基本语法,注意事项,函数参数,函数返回值,本质

文章目录 1. 引用的基本语法2. 引用的注意事项3. 引用做函数参数4. 引用做函数返回值5. 引用的本质6. 常量引用 1. 引用的基本语法 作用是&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名 原名 2. 引用的注意事项 引用必须初始化引用在初始化后&#xff0c;不…

某省电子税务局网上系统报账及报税状态自动查询(python程序)

该自动批量查询工具的目的是给一些代记账的公司使用&#xff0c;可以让他们快捷的知道目前有哪些公司需要进行哪些项目的申报&#xff0c; 因为他们需要给很多家公司进行报账&#xff0c;多的有四五百家&#xff0c;普遍做法是在税务系统每次都人工登录每个公司&#xff0c;然后…

江苏省电子税务局中文点选验证码识别研究

最近突发奇想&#xff0c;想研究一下中文识别。因为之前研究过简单数字&#xff0c;字母类的识别&#xff0c;这种识别种类很少&#xff0c;数字就10个&#xff0c;字母顶多就26个。但是一到中文&#xff0c;常用字就有3000多个&#xff0c;数量级有了巨大提升。不知道传统的方…

全国税收调查系统服务器的url地址,天津市电子税务局税收统计调查数据采集操作流程说明...

税收统计调查数据采集 按照此路径找到重点税源登录天津市电子税务局“我要办税->税费申报及缴纳->申报辅助信息报告->税收统计调查数据采集”。 以18年为例进入到税收调查任务界面。选择2018年度全国税收调查。 1确认报表期 选择应该填写的报表期&#xff0c;点击在线…

税务服务器管理系统登不上,网上税务局登录失败解决方案

近日&#xff0c;有不少纳税人在使用网报系统时无法登陆&#xff0c;不要着急&#xff0c;小编在此教您三步走&#xff1a; 第一步&#xff1a;还原高级设置 点开您所用浏览器的选项页面&#xff0c;点击红框工具&#xff0c;然后点击黄框internet选项。 依照以上操作&#xff…

电子税务局网上申报系统弹出Acrobat错误的解决方法

今天财务部门同事在电子税务局网上申报系统提交时出现了“Acrobat不允许连接至”的错误&#xff0c;如下图所示&#xff1a; 1。首先关闭网页&#xff0c;然后打开Adobe Acrobat&#xff0c;在菜单栏点击【编辑】--【首选项】&#xff0c;如下图所示&#xff1a; 2。在左侧“种…

网上报税流程

&#xff08;一&#xff09;网上报税地址 登陆济南市地方税务局网站&#xff1a; www.jnds.gov.cn 。点击导航栏中的网上报税&#xff0c;进入网上报税登陆界面。 &#xff08;二&#xff09;登录&#xff1a; 操作&#xff1a;输入纳税人识别号、密码、校验码&#xff08;小写…

全国增值税发票查验平台 | 免验证码

国家税务总局全国增值税发票查验平台 众所周知&#xff0c;发票查验有一个肉眼难以辨认的验证码&#xff0c;今天推荐给各位的是国税总局发票查验的免码接口&#xff0c;目前支持全发票种类&#xff0c;你们看到的没错&#xff0c;是全发票种类&#xff0c;市面上的API接口也不…

国税怎么用计算机代码报税页面,自然人电子税务局网页端操作流程如下

原标题&#xff1a;自然人电子税务局网页端操作流程如下 享受暂缓缴纳个税政策的个体工商户注意啦&#xff0c;应该在2021年1月1日至1月20日期间&#xff0c;缴纳2020年依据规定缓缴的经营所得个人所得税。跟着小编一起往下看吧! 一、政策依据 根据国家税务总局2020年10号公告&…

增值税电子发票的对接系统的设计

一 序 发票一直以来是都是跟以票控税相关的&#xff0c;没有严格的去搜下书面的定义&#xff0c;从百度百科上摘一段&#xff1a; 发票在我国社会经济活动中具有极其重要的意义和作用。 1.发票具有合法性、真实性、统一性、及时性等特征&#xff0c;是最基本的会计原始凭证之…

Python入门(十五)函数(三)

函数&#xff08;三&#xff09; 1.返回值1.1 返回简单值1.2 让实参变成可选的1.3 返回字典1.4 结合使用函数和while循环 作者&#xff1a;Xiou 1.返回值 函数并非总是直接显示输出&#xff0c;它还可以处理一些数据&#xff0c;并返回一个或一组值。函数返回的值称为返回值。…

Photoshop使用教程 如何在线抠图

PS软件已经越来越普及&#xff0c;不管是拍什么类型的照片都少不了修图&#xff0c;而PS是相较易操作而且很专业的一个PS软件&#xff0c;但是很多人可能在电脑上无法安装Photoshop软件&#xff0c;遇到这样的问题应该怎么办呢&#xff1f;今天小编和大家一起看看没有Photoshop…

花33元租号玩2小时王者荣耀,居然还有这样的App

梦晨 发自 凹非寺量子位 报道 | 公众号 QbitAI 史上最严防沉迷规定的第一周&#xff0c;已经有小学生租号玩王者荣耀了。 据央视新闻曝光&#xff0c;租一个等级高、皮肤多的账号玩2小时就要花费33元。 而且不是店家发账号密码给你登录这么简单。 拍下账号后得到的是一串解锁码…

计算机游戏软件使用说明书,虚贝游戏上号器怎么用 使用方法详解

虚贝上号器是专为虚贝租号平台打造的上号软件&#xff0c;可以方便的进行选号下单、商品收藏、订单管理等功能&#xff0c;帮助您实现电脑游戏租赁后的自动登录&#xff0c;下面就跟小编一起了解下具体用法吧。 第一步 注册并登录 下载安装&#xff0c;并注册一个虚贝网帐号并登…

网路安全技能竞赛——【Linux操作系统渗透提权】解析(超级详细)

Linux操作系统渗透提权 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2202&#xff08;关闭链接&#xff09;用户名&#xff1a;hacker 密码&#xff1a;123456 使用渗透机对服务器信息收集&#xff0c;并将服务器中SSH服务端口号作为flag提交&#xff1b;…

数据挖掘学习(三)——文本挖掘

笔者是一个痴迷于挖掘数据中的价值的学习人&#xff0c;希望在平日的工作学习中&#xff0c;挖掘数据的价值&#xff0c;找寻数据的秘密&#xff0c;笔者认为&#xff0c;数据的价值不仅仅只体现在企业中&#xff0c;个人也可以体会到数据的魅力&#xff0c;用技术力量探索行为…

七种方法计算文本相似度方法

简单讲解 基于关键词的空间向量模型的算法&#xff0c;将用户的喜好以文档描述并转换成向量模型&#xff0c;对商品也是这么处理&#xff0c;然后再通过计算商品文档和用户偏好文档的余弦相似度。 文本相似度计算在信息检索、数据挖掘、机器翻译、文档复制检测等领域有着广泛…