函数间的双向传递_第1页
函数间的双向传递_第2页
函数间的双向传递_第3页
函数间的双向传递_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、函数的参数不仅可以是整型、实型、字符型等数据,还可以是变量的指针,它将一个变量的首地址从主调函数传送到另一个函数中,以间接的方式,实现了函数间数据的双向传递。谭浩强先生用一个简单的例子:输入两个整数,按大小顺序输出,用函数处理,说明了指针的这类应用。 1、【例】输入的两个整数按大小顺序输出, 用函数处理,而且用指针类型的数据作函数参数。swap(int *p1,int *p2)   int temp;   temp=*p1;   *p1=*p2;   *p2=temp;main() int a,b; &#

2、160;  int *pointer_1,*pointer_2;    scanf("%d,%d",&a,&b);    pointer_1=&a;pointer_2=&b;    if(a<b)          swap(pointer_1,pointer_2);    printf("n%d,%dn&qu

3、ot;,a,b);对程序的说明:       swap是用户定义的函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。      接着执行if语句,由于ab,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。

4、采取的依然是“值传递”方式。因此虚实结合后形参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,

5、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()间被共享了。       既然变量都被共享

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论