网站大量收购闲置独家精品文档,联系QQ:2885784924

63C++指针作为函数参数.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
63C指针作为函数参数

函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送给被调用函数的形参。 【例6.3】题目同例6.2,即对输入的两个整数按大小顺序输出。这里用函数处理,而且用指针类型的数据作函数参数。程序如下: #include?iostream using?namespace?std; int?main(?) { void?swap(int?*p1,int?*p2);?//函数声明 int?*pointer_1,*pointer_2,a,b;?//定义指针变量pointer_1,pointer_2,整型变量a,b cinab; pointer_1=a;?//使pointer_1指向a pointer_2=b;?//使pointer_2指向b if(ab)?swap(pointer_1,pointer_2);?//如果ab,使*pointer_1和*pointer_2互换 coutmax=a min=bendl;?//a已是大数,b是小数 return?0; } void?swap(int?*p1,int?*p2)?// HYPERLINK /cpro/ui/uijs.php?adclass=0app_id=0c=newscf=1001ch=0di=128fv=18is_app=0jk=a0896169266ee5bbk=%BA%AF%CA%FDk0=%BA%AF%CA%FDkdi0=0luki=4mcpm=0n=10p=baiduqcprrb=0rs=1seller_id=1sid=bbe560ssp2=1stid=0t=tpclicked3_hctd=1837916tu=u1837916u=/Program/cplus/base/342.htmlurlid=0 \t /Program/cplus/base/_blank 函数的作用是将*p1的值与*p2的值交换 { int?temp; temp=*p1; *p1=*p2; *p2=temp; } 运行情况如下: 45 78↙ max=78 min=45 请注意:不要将main函数中的swap函数调用写成 ? ?if(ab) swap(*pointer_1,?*pointer_2); INCLUDEPICTURE \d /uploads/allimg/141020/2249443Y6-0.png \* MERGEFORMATINET  图6.9 请注意交换*p1和*p2的值是如何实现的。如果写成以下这样就有问题了: void?swap(int?*p1,?int?*p2) { int?*temp; *temp=*p1;?//此语句有问题 *p1=*p2; *p2=*temp; } 本例采取的方法是交换a和b的值,而p1和p2的值不变。这恰和例6.2相反。 可以看到,在执行swap函数后,主函数中的变量a和b的值改变了。这个改变不是通过将形参值传回实参来实现的。请读者考虑一下能否通过调用下面的函数实现a和b互换。 void?swap(int?x,?int?y) { int?temp; temp=x; x=y; y=temp; } 在main函数中用“swap(a,?b);”调用swap函数,会有什么结果呢?在函数调用时,a的值传送给x,b的值传送给y,如图6.10(a)所示。执行完swap函数最后一个语句后,x和y的值是互换了,但main函数中的a和b并未互换,如图6.10(b)所示。也就是说由于虚实结合是采取单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参。 INCLUDEPICTURE \d /uploads/allimg/141020/2249441350-1.png \* MERGEFORMATINET  图6.10 为了使在函数中改变了的变量值能被main函数所用,不能采取把要改变值的变量作为参数的办法,而应该用指针变量作为函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了“通过调用函数使变量的值发生变化,在主调函数中使用这些改变了的值”的目的。 如果想通过函数调用得到n个要改变的值,可以采取下面的步骤: 在主调函数中设n个变量,用n个指针变量指向它们; 编写被调用函数,其形参为n个指针变量,这些形参指针变量应当与主调函数中的n个指针变量具有相同的基类型; 在主调函数中将n个指针变量作实参,将它们的值(是地址值)传给所调用函数的n个形参指针变量,这样,形参指针变量也指向这n个变量; 通过形参指针变量的指向,改变该n个变量的值; 在主调函数中就可以使用这些改变了值的变量。 请注意,不能

文档评论(0)

dashewan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档