关于函数参数的一点总结.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  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文档。上传文档
查看更多
关于函数参数的一点总结

关于函数参数的一点总结 先理解一个东西: int n; n = 3; printf(%d, n); printf(“%d”,n); 看一下n在内存中的表现 int n;申请一段内存,这是n就代表一段sizeof(int)个字节的内存,“12FFCC”表示这段内存的首地址,也就是第一个字节的地址(因为内存单元是以字节为单位的),第一个输出就是输出这段内存中存储的数据,就是3,是取址符,第二个输出就表示输出n这段内存的首地址,所以输出为“12FFCC”。 理解了上面的,现在来看函数的参数。 先记住一点:函数的参数永远是值传递,不管你传的是int,float,int*,还是struct node *类型的值。 某一个函数在执行的时候,该函数就得到一个所传参数的复制品;那么在这个函数内部,对这个复制品的任何改变都不会影响实际这个参数本身。 现在就来举例说明: #includestdio.h void Fun(int m){ m = 4; printf(%d, m); } main(){ int n; n = 3; printf(%d, n); Fun(n); printf(%d, n); } main函数两个输出都是3,可以理解吗?函数Fun执行的时候,n就产生了一个复制品,(脑子里要想着上面那个n的内存图),执行 m=4;语句后这个复制品里面的数据就变成了4;就是说此时Fun里面的那个输出为4.可是你复制品里面的值改变了,实际的值并没有改变,所以main函数里的第二个输出仍为3. #includestdio.h void Fun(int m){ m = 4; printf(%d, m); } main(){ int n; n = 3; printf(%d, n); Fun(n); printf(%d, n); } 这个函数执行后你会发现,main函数里的第二个输出为4,可是不是说是复制品吗,怎么实际的也改变了,注意一下,Fun函数里的参数类型,它是int 类型,也就是说传的是参数的引用(就是地址),这时候这个复制品就是这个地址就是“12FFCC”那么照上面说的,对这个地址的改变不会影响实际,也就是说你在函数里面把m改变了(这个好像实现不了,但是是这样理解的),实际的不会变,可是为什么输出的n改变了,你好好看一下,在函数里我们是对m进行改变吗?不是,是对m,m是什么?它是一段int型内存,我们是把地址复制了,可是这个地址“12FFCC”所指向的内存是不变的,不管你是复制品还是实际的,你这个确切的地址在内存中都是特定的一段,也就是说我们函数里面对n的改变操作是在同一段内存进行的(这是最关键的),所有这个改变有效。 #includestdio.h void Fun(int *m){ *m = 4; printf(%d, *m); } main(){ int n; n = 3; printf(%d, n); Fun(n); printf(%d, n); } 这个程序和上面的程序产生的效果是一样的,这时,函数的参数是int指针类型,也就是传的是一个地址,(这和上面有区别,上面传的是n函数获取的是n的引用(地址),可是这个程序要传指针(地址))所有传n,再看Fun函数里面,里面改变的是*m,*m是这个地址指向的一段int型内存,复制品是n,他是地址,不管是复制品还是实际的,它们指向同一段内存,所有改变有效,是不是和上面一样的啊,好,紧接着下面这个程序: #includestdio.h void Fun(int *m){ int t = 4; m = t; printf(%d, m); } main(){ int n; n = 3; printf(%d, n); Fun(n); printf(%d, n); } 这个程序的Fun函数里面把m的值改变了,m是什么,是地址,是n,它是个复制品,所以对它的改变无效,所有main函数里面的两个输出不变。 下面是运行结果: 3 12FFCC n

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档