作者:泮春宇
时间;16 09,09
* 问题描述 :变量交换
* 输入描述 :1 2
* 程序输出 :1 2
程序:
实例一/(传真1)传值
#include <iostream>
using namespace std;
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;
}
运行结果:
运行失败!
实例2;传地址
程序;#include <iostream>
using namespace std;
void myswap(int *p1, int *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;
}
运行结果:
运行成功!
实例3;引用做形参
程序:
#include <iostream>
using namespace std;
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;
}
运行结果:
运行成功!
结果分析:第一种方法失败是因为主函数与调用函数在申请空间时是相互独立的,因此造成了调用函数在结束时就会释放X,Y。而主函数还未结束,因a,b值不发生改变。
第二种方法是因为调用函数申请了存放A,B的地址,在调用时通过* 间接的访问了XY
第三种是因为主函数在申请了a,b两个内存后,调用函数又把这两个内存拿来重新命名了
收获:回想起了当初学习指针时的场景。