*作者:毕梦楠
*完成日期:2015年9月11日
*版本号:v1.0
*
*问题描述:C语言提供了两种函数参数传递的方式:传值和传地址。
在C++中,又拓展了引用方式。通过本项目,确认自己
已经掌握了这三种方式的原理,为后续学习做好准备。
*输入描述:两个整型变量
*程序输出:交换后的两个整型变量
*/
(1)传值
#include<stdio.h>
void myswap(int,int);
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b); //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
//(1)传值
void myswap(int x, int y)
{
int t;
t=x;
x=y;
y=t;
}
运行结果如下:
交换不成功的原因是:调用函数本身时不对实参进行操作,即使形参的值在函数中改变了,但实参完全不会受到影响,所以没有交换成功。
(2)传地址
#include<stdio.h>
void myswap(int *,int *);
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(&a,&b);
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
//(2)传地址
void myswap(int *p1, int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
运行结果如下:
可以看到交换成功了,地址传递把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。所以交换成功了。
(3)引用作形参
<span style="font-size:12px;">#include<stdio.h>
void myswap(int &,int &);
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b);
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
//(3)引用作形参
void myswap(int &x, int &y)
{
int t;
t=x;
x=y;
y=t;
} </span>
运行结果如下:
可以看到交换也成功了。如果以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。
知识点总结:通过这次的比较,让我理解了这三种传递方式的不同,从而掌握得更加牢靠。
学习心得:写完这篇博客,我对如何在CSDN上发表博客更加熟练了。在发表博客的同时又复习了C、C++语言,可以说是一举两得。