c语言值传递的3种形式.docxVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
//全部摘自别的博客,以前对值传递很迷糊,看完豁然开朗,整理下,来百度文库赚点分。一、三道考题开讲之前,我先请你做三道题目。(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){? ?inttmp;? ?tmp = x;? ?x = y;? ?y = tmp;? ?printf(x = %d, y = %d\n, x, y);}main(){? ?int a = 4,b = 6;? ?Exchg1(a, b);? ?printf(a = %d, b = %d\n, a, b);? ?return(0);}输出的结果为:x = ____, y=____.a = ____, b=____.问下划线的部分应是什么,请完成。考题二,程序代码如下:void Exchg2(int *px, int *py){? ?inttmp = *px;? ?*px = *py;? ?*py = tmp;? ?printf(*px = %d, *py = %d.\n, *px, *py);}main(){? ?int a = 4;? ?int b = 6;? ?Exchg2(a, b);? ?printf(a = %d, b = %d.\n, a, b);? ?return(0);}输出的结果为为:*px=____, *py=____.a=____, b=____.问下划线的部分应是什么,请完成。考题三,程序代码如下:void Exchg3(int x, int y){? ?inttmp = x;? ?x = y;? ?y = tmp;? ?printf(x = %d,y = %d\n, x, y);}main(){? ?int a = 4;? ?int b = 6;? ?Exchg3(a, b);? ?printf(a = %d, b = %d\n, a, b);? ?return(0);}输出的结果为:x=____, y=____.a=____, b=____.问下划线的部分应是什么,请完成。你不在机子上试,能作出来吗?你对你写出的答案有多大的把握?正确的答案,想知道吗?(呵呵,让我慢慢地告诉你吧!)好,废话少说,继续我们的探索之旅了。我们都知道:C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。题一为值传递,题二为地址传递,题三为引用传递。不过,正是这几种参数传递的形式,曾把我给搞得晕头转向。我相信也有很多人与我有同感吧?下面请让我逐个地谈谈这三种传递形式。二、函数参数传递方式之一:值传递(1)值传递的一个错误认识先看考题一中Exchg1函数的定义:void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数的形式参数 */{? ?inttmp;? ?tmp = x;? ?x = y;? ?y = tmp;? ?printf(x = %d, y = %d.\n, x, y);}问:你认为这个函数是在做什么呀?答:好像是对参数x、y的值对调吧?请往下看,我想利用这个函数来完成对a,b两个变量值的对调,程序如下:main(){? ?int a = 4,b = 6;? ?Exchg1(a, b); /*a,b变量为Exchg1函数的实际参数。*/? ?printf(a = %d, b = %d.\n”, a, b);? ?return(0);}我问:Exchg1()里头的printf(x = %d, y = %d.\n, x, y);语句会输出什么啊?我再问:Exchg1()后的printf(a = %d, b = %d.\n”, a, b);语句输出的是什么?程序输出的结果是:x = 6, y = 4.a = 4, b = 6.为什么不是a = 6,b = 4呢?奇怪,明明我把a、b分别代入了x、y中,并在函数里完成了两个变量值的交换,为什么a、b变量值还是没有交换(仍然是a = 4、b = 6,而不是a = 6、b = 4)?如果你也会有这个疑问,那是因为你根本就不知实参a、b与形参x、y的关系了。(2)一个预备的常识为了说明这个问题,我先给出一个代码:? ?int a = 4;? ?int x;? ?x = a;? ?x = x + 3;看好了没,现在我问你:最终a值是多少,x值是多少?(怎么搞的,给我这个小儿科的问题。还不简单,不就是a = 4、x = 7嘛!)在这个代码中,你要明白一个东西:虽然a值赋给了x,但是a变量并不是x变量哦。我们对x任何的修改,都不会改变a变量。呵呵!虽然简单,并且一看就理所当然,不过可是一个很重要的认识喔。(3)理解值传递的形式看调用Exch1函数的代码:main(){? ?int a =

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档