您的位置:首页 > 其它

第二周项目1函数参数传递的三种方式

2015-09-07 16:22 309 查看
问题及代码:

/*
Copyright(c) 2015,烟台大学计算机学院
All rights reserved.
文件名称:text.cpp
作者:李涵睿
完成日期:2015年9月7日

问题描述:输入两整形变量,将其交换
输入描述:两个整数
程序输出:交换后的两整数

*/
#include <stdio.h>
void myswap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
printf("x = %d, y = %d\n", x, y);

}
int main()
{
int a,b;
printf("请输入待交换的整数:");
scanf("%d%d",&a,&b);
myswap(a, b);
printf("调用后的结果是:a = %d和b = %d\n", a, b);
return 0;
}
运行结果:
<img src="https://img-blog.csdn.net/20150907194710940?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="620" height="235" alt="" />
#include <stdio.h>
void myswap(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
printf("*p1 = %d, *p2 = %d\n", *p1, *p2);

}
int main()
{
int a,b;
printf("请输入待交换的整数:");
scanf("%d%d",&a,&b);
myswap(&a, &b);
printf("调用后的结果是:a = %d和b = %d\n", a, b);
return 0;
}




#include <stdio.h>
void myswap(int &x,int &y)
{
int t;
t=x;
x=y;
y=t;
printf("x = %d,  y= %d\n", x, y);

}
int main()
{
int a,b;
printf("请输入待交换的整数:");
scanf("%d%d",&a,&b);
myswap(a, b);
printf("调用后的结果是:a = %d和b = %d\n", a, b);
return 0;
}




知识点总结:

第一种传值法

函数在调用时是隐含地把实参a、b 的值分别赋值给了x、y,之后在myswap函数体内再也没有对a、b进行任何的操作了。交换的只是x、y变量。并不是a、b。当然a、b的值没有改变啦!函数只是把a、b的值通过赋值传递给了x、y,函数里头操作的只是x、y的值并不是a、b的值。

第二种传地址法

将a的地址(&a)代入到p1,b的地址(&b)代入到p2。同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px、py,而不是传递的a、b的内容对*px、*py的操作当然也就是对a、b变量本身的操作了。所以函数里头的交换就是对a、b值的交换了。

第三种引用做形参

参数x、y是int的变量,调用时我们可以像值传递一样调用函数。但是x、y前都有一个取地址符号“&”。有了这个,调用myswap时函数会将a、b 分别代替了x、y了,x、y分别引用了a、b变量。这样函数里头操作的其实就是实参a、b本身了,也就是说函数里是可以直接修改到a、b的值了。

学习心得:

认真研究,会有成就感!学习也有魅力!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: