c语言函数指针有什么用(C语言中指针的作用是什么)

2024-06-05 07:30:25 3

c语言函数指针有什么用(C语言中指针的作用是什么)

本文目录

C语言中指针的作用是什么

指针指向地址,指针的特性就是在地址不变的情况下,可以很方便的修改所指向的内容\x0d\x0a\x0d\x0a最重要的应用有两个,一是函数参数,二是函数指针\x0d\x0a函数参数:函数返回值只有一个,如果想回传多个参数,则必须使用指针\x0d\x0a函数指针:典型应用就是回调函数(callback)

C语言的指针有什么用

C里面函数都只能返回一个值,如果你的函数要返回两个值,那就要用指针了,把变量地址传进函数,然后把希望通过函数操作后想要的值存进传进来的变量地址里面。当然函数可以返回数组,结构体,但是你看多了你就知道,没有人会这么做的,都返回指针。试想如果我有一个1万个元素的数组,你会把它整个地传进一个函数里面或者整个地返回出来吗?C语言里面都是传值的,就是说传进函数的参数值首先被复制一边赋值给形式参数,你想想1万个元素,够呛咯!但是有指针就好多了,我们可以把指针(数组的第一个元素的地址)传进函数里面,有了开始地址,函数就知道东西在哪儿,就直接去那儿操作就可以了。单凭这一点,你就可以知道指针的威力,当然你也知道了指针一个很大的用处就是用于函数之间参数的传递与返回。指针就相当于一个代理一样,通过代理你知道了你要的东西在哪儿,你去那个地方就可以了,而不是需要把东西整个地板到你面前。

c语言为什么要有指针呢

因为指针通过地址传递参数,如果不用指针传送速度慢。

在没有C++语言的年代,没有面向对象、模板的语法支持,struct中还不能定义函数,用C语言想要对业务功能(算法,此处即指函数)进行抽象,不想依赖具体的数据结构/数据类型,此时就必须用指向函数的指针来实现抽象与具体的分离,

该函数的入参可以是void*,这样调用者就可以传入任意类型的参数了。后来有了C++,就用类成员函数和泛型(模板+functor)来代替了,这样做有更强的静态类型检查机制和编程约束,有利于减少滥用风险。

函数指针的一个典型应用场合是实现回调,因为此时还不知道具体函数定义,事件发生时才调用、才确定;类比于面向对象中的“多态”+设计模式中的“观察者模式”,回调的实质仍然是抽象。

扩展资料

C语言程序开发中,数组指针是有其独特的作用的,它可以用于限制函数接收指针索引的内存长度,利用编译器规范程序项目。在定义数组指针时,利用C语言的typedef关键字常常能够使代码更加易读:

typedef int Vector3d;

void transform(Vector3d *vector);

/* equivalent to `void transform(int (*vector))` */

...

Vector3d vec;

...

transform(&vec);   

C语言指针的作用有哪些

  指针的主要作用有两个方面:   1、指针就是地址,它和数组联系起来,可以方便的取数组中的值。   2、可以作为函数的引用。   指针的本质:一种复合的数据类型。   指针包括两个方面:一个是它本身的值,是一个内存中的地址;另一个是指针所指向的物,是这个地址中所存放着具有各种各样意义的数据。

求解释c语言函数指针的作用

上面的话是有道理的。只是,要真的体会这些名词,需要你亲历躬行,一个“百度知道”是很难让你真正体会并理解的。国人一些教科书也不负责任,人云亦云的说这些话,但很少能透彻讲解。我小试一下。1. 便于分层设计:函数指针是引用,是间接层,或曰隔离层。它输出到上层,给上层用户用。函数实体是实现,在下层,给开发者用,实现者(软件工程师)关注。这就是简单的分层的概念了。上层用户想让一个函数所做的东西会变化时,我们只需要改变底层实现,并用函数指针指向新的实现就行了。再精炼一下分层:分层的核心是对接口进行设计和实现。函数指针的作用就是提供不同实现的统一接口。2. 利于系统抽象:只有存在多个类似的实体需要模拟、操作或控制时(这种情况很多)才需要抽象。多个类似的实体就是对象,抽象的结果就是类。在C里边,可以用函数指针数组完成这种抽象。如, fopen 就是一个例子。他可以打开文件。C里面将磁盘文件、串口、USB等诸多设备抽象为文件。3. 降低耦合度以及使接口与实现分开:第1条中的解释已经说明了这一点。再具体一下:我曾搭建过一个嵌入式平台。其中的设备操作(硬件驱动)采用了多组函数指针数据,并进行了简单的封装,其结果是:业务软件使用函数指针数组的封装函数访问设备。这个封装可展示为:int DevOpen(char *strDevName);int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong);int Read(int DevID, char* DataTo, int StartDevAddr, int DataLong);int DevClose(int DevID);这组抽象出来的函数,是一组语义清晰且稳定的上层接口,为上层的业务开发团队使用。底层的驱动层,各自实现自己的设备打开、读、写及关闭代码,然后,注册自己的设备到系统列表里。上层业务接可以使用了。期间的耦合在这里:int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong){ /* Error detecting. */ return DevWrite( char* DataFrom, int StartDevAddr, int DataLong );}其中,DevWrite就是一个函数指针数组:int (*DevWrite)( char*,int,int ) = {0};里面放的就是多个设备的写的操作。其中包括:UART,RTC,WatchDog。EEPROM,DigitalInput,DigitalOutput,Key,LCD,LED。好了。说的太多了。如需要学习,可邮件livefuture@163.com。但愿对你有所帮助。

c语言函数指针有什么用(C语言中指针的作用是什么)

本文编辑:admin

更多文章:


慕课学号已被其他账号认证(慕课该学号存在异常认证关系)

慕课学号已被其他账号认证(慕课该学号存在异常认证关系)

本文目录慕课该学号存在异常认证关系为什么我的中国大学慕课总是被别人登录中国大学mooc,退出重新登录之后所有数据都没了,学校云也没了,但是重新认证他显示已经被认证过了手机号慕课学校认证了,微信怎么绑定慕课账号用同学手机号认证了,显示账号被其

2024年7月10日 07:22

java列表(JAVA列表界面代码)

java列表(JAVA列表界面代码)

各位老铁们,大家好,今天由我来为大家分享java列表,以及JAVA列表界面代码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录JAVA列表界面代码j

2024年7月13日 04:56

unchangeable(unchargeable中文什么意思)

unchangeable(unchargeable中文什么意思)

本文目录unchargeable中文什么意思unchangeable有没有古板的意思unchargeable中文什么意思unchangeableadj.不可改变的; 不可移易; 形近词:interchangeableexchangeable

2024年7月9日 07:05

深圳疫情最新通告(深圳市公共场所防疫最新规定)

深圳疫情最新通告(深圳市公共场所防疫最新规定)

本文目录深圳市公共场所防疫最新规定2022深圳去澳门最新疫情防控政策深圳去澳门疫情48还是24小时深圳最新核酸要求汇总!附核酸检测点查询指南2022深圳受疫情影响部分景区暂停开放深圳解封最新消息2022附解封最新标准深圳机场疫情防控最新规定

2024年7月24日 04:33

origin官网下载(origin怎么查看下载地址)

origin官网下载(origin怎么查看下载地址)

本文目录origin怎么查看下载地址想下载origin画图软件,结果下载是EA游戏,是在官网上下载的呀steam下载的origin在哪画图软件origin的下载地址origin下载网址打不开怎么办origin怎么下载origin怎么查看下载

2023年11月13日 12:00

聚合数据api(邮编库api怎么用)

聚合数据api(邮编库api怎么用)

本文目录邮编库api怎么用聚合数据怎么删除API聚合数据怎么使用API接口是什么_api接口微信小程序如何接入美团api聚合数据网的数据怎么解析成列表API聚合数据是什么东西以聚合数据为参考的微信小程序合法域名配置常用的几个网络api邮编库

2024年7月20日 01:49

gatsby(了不起的盖茨比中,Gatsby对Daisy为何念念不忘)

gatsby(了不起的盖茨比中,Gatsby对Daisy为何念念不忘)

本文目录了不起的盖茨比中,Gatsby对Daisy为何念念不忘gatsby可以做英文名吗这个名包含什么意义了不起的盖茨比中,Gatsby对Daisy为何念念不忘当一个男人说,他已经放下初恋 ,那他一定是在骗人。初恋对于男人的意义就像天空与白

2024年6月23日 21:31

laravel auth认证(Laravel中Auth:guard表示什么意思)

laravel auth认证(Laravel中Auth:guard表示什么意思)

本文目录Laravel中Auth:guard表示什么意思laravel5.2创建前后台用户认证后怎么使用authLaravel自带的auth验证怎么实现自主的密码修改Laravel中Auth:guard表示什么意思guard英

2024年5月27日 19:54

非常后悔吃了几年的抗抑郁药(吃了四年抗抑郁焦虑药物现在非常镇静没有情绪没有情绪波动不会哭不会笑,是不是中枢神经被抑制了)

非常后悔吃了几年的抗抑郁药(吃了四年抗抑郁焦虑药物现在非常镇静没有情绪没有情绪波动不会哭不会笑,是不是中枢神经被抑制了)

这篇文章给大家聊聊关于非常后悔吃了几年的抗抑郁药,以及吃了四年抗抑郁焦虑药物现在非常镇静没有情绪没有情绪波动不会哭不会笑,是不是中枢神经被抑制了对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录吃了四年抗抑郁焦虑药物现在非常镇静

2024年7月21日 16:20

sales executive(sales executive position什么意思)

sales executive(sales executive position什么意思)

本文目录sales executive position什么意思销售代表(Sales Executive)与业务经理(Business Development Manager)是相同的工作吗salesexecutive是销售总监吗sales

2024年6月23日 00:45

你们手机上除微信,QQ外还有什么聊天软件是值得推荐的?为什么有人能在不拿到我手机情况下,查我和谁聊天还有定位

你们手机上除微信,QQ外还有什么聊天软件是值得推荐的?为什么有人能在不拿到我手机情况下,查我和谁聊天还有定位

本文目录你们手机上除微信,QQ外还有什么聊天软件是值得推荐的为什么有人能在不拿到我手机情况下,查我和谁聊天还有定位网站app制作如何植入聊天机器人的客服系统网页中的开发者工具各个菜单的工具有什么用一对一系统源码开发都有哪几种实现方式谁有C#

2024年6月8日 18:46

js压缩视频(怎么用JS把文件压缩成zip-CSDN论坛)

js压缩视频(怎么用JS把文件压缩成zip-CSDN论坛)

各位老铁们好,相信很多人对js压缩视频都不是特别的了解,因此呢,今天就来为大家分享下关于js压缩视频以及怎么用JS把文件压缩成zip-CSDN论坛的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录怎么用JS把文件压

2024年7月8日 22:30

select action怎么解决(struts2的表单标签select如何获取action传过来的list)

select action怎么解决(struts2的表单标签select如何获取action传过来的list)

大家好,关于select action怎么解决很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于struts2的表单标签select如何获取action传过来的list的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可

2024年8月21日 02:35

css中id和class区别(CSS中Class与ID的区别,Margin与Padding的区别)

css中id和class区别(CSS中Class与ID的区别,Margin与Padding的区别)

本文目录CSS中Class与ID的区别,Margin与Padding的区别CSS中的ID选择器和类选择器有什么区别css里面id和class的区别是什么什么叫id只能用一次class可以多次引用css里面,id和class的区别是什么看了很

2024年7月17日 21:22

replace函数替换身份证号(excel表格中怎么把身份证号中的2个数字替换)

replace函数替换身份证号(excel表格中怎么把身份证号中的2个数字替换)

本文目录excel表格中怎么把身份证号中的2个数字替换如何把excel表中身份证号前6位替换成空白怎么在电子表格中把身份证号7-14位统一换成星号excel 中(’身份证号)的’怎么替换 替换会出现数据不全的WPS表格身份证号后四位需要变*

2024年7月19日 13:10

棋牌源码搭建一条龙(定制开发棋牌游戏哪家强)

棋牌源码搭建一条龙(定制开发棋牌游戏哪家强)

本文目录定制开发棋牌游戏哪家强运营好一款棋牌游戏要如何做定制开发棋牌游戏哪家强目前定制开发做的公司很多,但要选择合适公司这个就需要自己有一定的鉴别能力,主要是市场一些技术方面参差不齐,特别是不同这个行业就更难了,所以如果资金实力不是特别充足

2024年7月3日 10:37

elseif是什么意思(在vb中elseif是什么意思)

elseif是什么意思(在vb中elseif是什么意思)

本文目录在vb中elseif是什么意思vb中if ,elseif ,else的区别是什么在vb中elseif是什么意思else可以理解为“否则”elseif是在前面的条件不成立的情况下,进行新的判断的时候用的举例如下:if 性别=“女“ t

2024年7月3日 08:47

s11全球总决赛韩国解说(lpl英文解说在哪看)

s11全球总决赛韩国解说(lpl英文解说在哪看)

大家好,s11全球总决赛韩国解说相信很多的网友都不是很明白,包括lpl英文解说在哪看也是一样,不过没有关系,接下来就来为大家分享关于s11全球总决赛韩国解说和lpl英文解说在哪看的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开

2024年7月17日 04:55

数组公式按什么显示内容(excel 满足a条件显示b内容(非求和))

数组公式按什么显示内容(excel 满足a条件显示b内容(非求和))

本文目录excel 满足a条件显示b内容(非求和)excel函数每次必须按ctrl+shift+回车才能显示正确结果excel的数组公式,计算结果是一组数字,怎么按条件显示计算结果EXCEL中我需要当E列既包含A列又包含B列时在D列显示E列

2024年7月18日 13:10

编程猫少儿编程(编程猫是什么)

编程猫少儿编程(编程猫是什么)

本文目录编程猫是什么编程猫是啥编程猫在线少儿编程有用吗大家觉得小码王少儿编程机构好还是编程猫比较好少儿编程一般多少钱编程猫学费贵吗编程猫和探月少儿编程是一样的吗成都编程猫少儿编程一节课多少钱编程猫在线编程到底怎么样如何看待少儿编程的编程猫编

2024年7月2日 09:22

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索