【例】输入的两个整数按大小顺序输出,用函数处理,而且用指针类型的数据作函数参数。.docVIP

【例】输入的两个整数按大小顺序输出,用函数处理,而且用指针类型的数据作函数参数。.doc

  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文档。上传文档
查看更多
【例】输入的两个整数按大小顺序输出,用函数处理,而且用指针类型的数据作函数参数。.doc

、【例】输入的两个整数按大小顺序输出, 用函数处理,而且用指针类型的数据作函数参数。 swap(int *p1,int *p2) { ?? int temp; ?? temp=*p1; ?? *p1=*p2; ?? *p2=temp; } main() { int a,b; ??? int *pointer_1,*pointer_2; ??? scanf(%d,%d,a,b); ??? pointer_1=a;pointer_2=b; ??? if(ab) ????????? swap(pointer_1,pointer_2); ??? printf(\n%d,%d\n,a,b); } 对程序的说明: ?????? swap是用户定义的函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。 ????? 接着执行if语句,由于a〈b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。采取的依然是“值传递”方式。因此虚实结合后形参p1的值为a,p2的值为b。这时p1和pointer_1指向变量a,p2和pointer_2指向变量b。 ????? 接着执行执行swap函数的函数体使*p1和*p2的值互换,也就是使a和b的值互换。 函数调用结束后,p1和p2不复存在(已释放)如图。 最后在main函数中输出的a和b的值是已经过交换的值。 进一步分析如下: ?????? 表面上看,由于a和b是main()的局部变量,他们的作用域就是main()的函数体,因此a,b对于swap()是不可见的,即swap()不能对a和b赋值,也不能使用a和b中的数据进行运算; ?????? 但是,当我们通过使用指针参数pointer1和pointer2,将a、b这2个地址从main()传入了swap();那么,swap()通过该地址,就可以找到main()的a,b,从而使得swap()就象main()一样,可以直接对a、b赋值,或直接用a、b中的值进行运算。 ?????? 这样一来,主调函数main()可以存取a、b,而被调函数swap()通过传入的地址,也可以存取a、b。我们说a、b在main()和swap()间被共享了。 ?????? 既然变量都被共享了,那么main()就可以通过a、b给swap()传送数据;同理swap()也可以通过a、b给main()传送数据了,这就是说,我们实现了这2个函数间的双向数据传递。 ?????? 恰可谓明修栈道,暗渡陈仓!!! 2、请注意交换*p1和*p2的值是如何实现的。请找出下列程序段的错误: swap(int *p1,int *p2) {int *temp; *temp=*p1;????? /*此语句有问题*/ *p1=*p2; *p2=temp; } ?????? 上面的错误在于int *temp是一个野指针!!!当你定义了一个指针A,但是没有明确指定A指向哪个变量,那么A就叫野指针; ?????? 一定要给你的指针变量赋初值,不要让他成为野指针,否则他会桀骜不驯,成为一个很危险的东西。 ?????? 遥想当年,他搞死过我的程序,也使我的系统死过机,甚至摧毁了我的操作系统.......;你要格外小心,不要让世界末日降临。 3、请考虑下面的函数能否实现实现a和b互换。 swap(int x,int y) {int temp; temp=x; x=y; y=temp; } 如果在main函数中用“swap(a,b);”调用swap函数,会有什么结果呢?请看下图所示。 上面的分析,再次验证了函数参数的单向值传递原则!!! 4、【例】请注意,不能企图通过改变指针形参的值而使指针实参的值改变。 swap(int *p1,int *p2) {int *p; p=p1; p1=p2; p2=p; } main() { int a,b; int *pointer_1,*pointer_2; ??? scanf(%d,%d,a,b); ??? pointer_1=a;pointer_2=b; ??? if(ab) swap(pointer_1,pointer_2); ???????? printf(\n%d,%d\n,*pointer_1,*pointer_2); } 其中的问题在于不能实现如图所示的第四步(d)。 ?????? 函数使用指针作为参数时,作为函数参数的一种,指针参数仍然也必须遵守单向值传递的原则,即指针参数中地址在被调函数中的改变

文档评论(0)

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

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

1亿VIP精品文档

相关文档