![值传递与地址传递(C语言)_第1页](http://file4.renrendoc.com/view/1841068f8114ffe0dede51deadfe741f/1841068f8114ffe0dede51deadfe741f1.gif)
![值传递与地址传递(C语言)_第2页](http://file4.renrendoc.com/view/1841068f8114ffe0dede51deadfe741f/1841068f8114ffe0dede51deadfe741f2.gif)
![值传递与地址传递(C语言)_第3页](http://file4.renrendoc.com/view/1841068f8114ffe0dede51deadfe741f/1841068f8114ffe0dede51deadfe741f3.gif)
![值传递与地址传递(C语言)_第4页](http://file4.renrendoc.com/view/1841068f8114ffe0dede51deadfe741f/1841068f8114ffe0dede51deadfe741f4.gif)
![值传递与地址传递(C语言)_第5页](http://file4.renrendoc.com/view/1841068f8114ffe0dede51deadfe741f/1841068f8114ffe0dede51deadfe741f5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、值传递与地址传递(C语言)、值传递/swap.c#includeintmain()inta=20;intb=30;intc=0;printf(ais%d,bis%dn,a,b);c=a;a=b;b=c;printf(now,ais%d,bis%dn,a,b);lxd(alxd-virtuamachinegc匚buildswaplxdlxd-virtual-machine:-/lxz$./build日is20,bis30nov/,ais30,bis20lxdlxdvirtuemachine口思考:两个变量交换值,经常会用到,可以把它提炼成一个函数,供复用。例2:/swap.c#includevo
2、idswap(inta,intb)intc=0;c=a;a=b;b=c;intmain()inta=20;intb=30;printf(ais%d,bis%dn,a,b);swap(a,b);/将a和b的副本传递过去/函数调用完后,swap的空间就出栈了,a和b做的那么多操作也没用了printf(now,ais%d,bis%dn,a,b);值传递后,a和b的值并没有交换成功父换玄b的值swap空间0Oa.b的值不会改变main空间值传递值传递:传递的只是一份副本。(只是给你看一下)特点:调用者可以保护自己空间值不被修改。【保护】缺点:因为每次调用都会传递一份副本,因此内存消耗很大,工程中不建议
3、使用。main函数调用swap函数,只是告诉swap函数a和b的值,但是不希望swap函数对main函数内的a和b的值进行修改。二、地址传递例3:/swap.c#includeintmain()voidswap(int*a,int*b)/通过*读门牌号里面的内容intc=0;c=*a;*a=*b;*b=c;inta=20;intb=30;printf(ais%d,bis%dn,a,b);swap(&a,&b);/将a和b的门牌号传递过去printf(now,ais%d,bis%dn,a,b);lxdlxd-virtual-machine:/lxz$gcc-obuildswap匚lxdlxd-v
4、irtual-machine:/lxz$./buildais20,bis30nowrais30,bis20Lxdlxd-virtual-machine:地址传递后,a和b的值交换成功了地址传递地址传递:传递的门牌号特点:调用者让被调者修改自己的空间值。【改】用处:调用者让被调者修改自己的空间值连续空间的传递优点:不用拷贝副本,可以节约空间。/scanf函数:inta=0;scanf(%d,a);如果是这样写,属于值传递。当键盘输入值后,a的值仍然不会改变scanf(%d,&a);如果是这样写,属于地址传递。当键盘输入值后,a的值才会改变三、连续空间只读性当看到函数声明时,能否大概猜出其功能呢?
5、因为在看代码时,函数非常多,不可能把所有代码一行一行都读完。因此要能看到函数声明,大体猜测到其功能。voidfun(chara);/值传递。fun函数只想拿到一个1字节/8bit的副本,只是拿来看一下,不会去影响调用者。voidfun(char*b);/地址传递。该空间可能会被修改。voidfun(constchar*b);/地址传递。只读空间,只是看看。/const告诉实现fun函数的程序员:fun函数里面绝对不能修改门牌号b的内容。/const也告诉调用fun函数的程序员:放心大胆地传递常量区的东西吧!不会出现段错误的!例4:/004.C#includevoidfun(char*p)p1=
6、2;/只看fun函数,传递过来一个指针,是可以对其内容进行修改的。但因为修改的是常量区的东西,因此会出现段错误intmain()fun(hello);/funf专递的是常量区的东西return0;若函数声明是voidfun(char*p);时,则看到它的程序员,在实现时,很可能会在里面写p1=2;。而且,调用该函数时,另一个程序员很可能会把hello传递出去。因此,很容易出现错误。lxdlxd-virtual-machine:/lxz$gcc004.c1scdolyd-virtual-mArhine./a.out段齬误(核心己转储)lxdLxd-virtual-rnachine:/lxz$出现
7、段错误修改:#includevoidfun(char*p)p1=2;intmain()charbuf=hello;fun(buf);return0;lxdlxd-virtual-machine:/Lxz$gcc004.clxdlxd-virtual-machine:/aoutlxd(aixd-virtual-machine:/lxz$口没有错误1、strccpy/manstrcpychar*strcpy(char*dest,constchar*src);/原地址的内容不改变,目的地址的内容会改变!2、spririntf/mansprintf#includeintprintf(constchar*format,.);打打印到屏幕上intfprintf(FILE*stream,constchar*format,.);intsprintf(char*str,constchar*format,.);/打丁印到内存中。打印前不能变,打印后,内存改变了!intsnprintf(char*str,size_tsize,constchar*format,.);例5:charbuf100;spr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织辅助设备生产项目可行性研究报告申请建议书
- 中国环保纸模花盆项目投资可行性研究报告
- 公司合作申请书范文
- 学生会先进个人申请书
- 电能质量评估与改善对企业效益的影响
- 中国复合铝门窗项目投资可行性研究报告
- 现代科技在美工区活动中的应用与展望
- 电力系统的长期稳定运行与日常维护保养之道
- 现代市场营销在电影娱乐产业的作用
- 建设项目职业病危害预评价报告编制要求
- 2023第二学期八年级英语备课组工作总结
- 国企经理层任期制和契约化管理任期制与契约化相关模板
- 压力管道检验员题库
- 动脉采血操作评分标准
- 病理科科科内会诊记录
- 小学生主题班会 弘扬航天精神 课件 (27张PPT)
- 电力服务收费标准附表
- 小学主题班会教学设计-《给你点个“赞”》通用版
- 【教学创新大赛】《系统解剖学》教学创新成果报告
- 赛意EAM设备管理IOT解决方案
- 初中语文-《桃花源记》教学课件设计
评论
0/150
提交评论