/* .*Copyright (c)2015,烟台大学计算机与控制工程学院 .*All rights reserved. .*文件名称:H1.cpp .*作 者:辛志勐 .*完成日期:2015年9月8日 .*版 本 号:v1.0 .* .*问题描述:传值和传地址。在C++中,又拓展了引用方式。通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准备。 ..*输入描述:无 ..*程序输出:学生平均分,课程平均分。 ..*/
(1)传值
#include<stdio.h>
void myswap(int x, int y)//此操作为传值,即将a的值传给x,b的值传给y
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b); //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
/*这种做法并不能成功,因为传值是将a的值赋给x,b的值赋给y,
操作时只是将xy的值相交换,而返回的值是ab,ab的值并没有交换,所以没有交换成功。*/
运行结果:
(2)传地址
#include<stdio.h>
void myswap(int *p1, int *p2)//此操作使用了指针,将a的地址赋给p1,b的地址赋给了p2
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(&a,&b); //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
/*这种做法能成功,因为此次传的是址,实质上p1与p2的交换等于a与b的交换。*/
运行结果:
(3)引用做形参
#include<stdio.h>
void myswap(int &x, int &y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a, b;
printf("请输入待交换的两个整数:");
scanf("%d %d", &a, &b);
myswap(a,b); //分三个程序,分别写上调用myswap的合适形式
printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
return 0;
}
/*这种做法能成功,因为引用的形参数值被修改的同时,也修改了对应实参的值。*/
运行结果:
知识点总结: 实现两个数值的交换需要地址的交换。通过本次学习学会了如何实现两个数的交换。
学习心得:做传地址时遇到了些麻烦,但通过百度和同学的帮助也顺利地解决,总之失败是成功之母,相信自己以后会越挫越勇。