关于概念性问题,求解
void swap1(int x ,int y)
{
int t;
t=x;
x=y;
y=t;
}
void swap2(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
main() 这是原题,按照我的理解,swap1后因为在函数里面交换了并没有返回到主函数中
{ 所以输出是 5 6
int a1=5,a2=6,*p1=&a1,*p2=&a2; 确认一下,这里是属于作用域的问题吗?
swap1(a1,a2);
printf("%d %d ",a1,a2); 第二次swap2后交换了地址里面的值输出是6 5
swap2(p1,p2);
printf("%d %d ",a1,a2);
}
现在有一个同学在swap1函数的形参改成void swap1(int &x ,int &y),他就可以交换啦,但我改回去就有错误,两台电脑。
想看下大家是如何分析的。
[解决办法]
//================================================================= #include <iostream.h> void swap1(int x ,int y) { int t; t=x; x=y; y=t; }void swap2(int *x,int *y)//传值传的是指针,实实在在会改变形参指向的值{ int t; t=*x; *x=*y; *y=t;} void swap3(int &x,int &y) //传值传的是引用,实实在在会改变形参的值{ int t; t=x; x=y; y=t;} void main(){ int a = 1; int b = 2; swap1(a,b); cout<< "a=" << a <<endl<<"b=" <<b<<endl; int c = 3; int d = 4; swap2(&c,&d); cout<< "c=" << c <<endl<<"d=" <<d<<endl; int e = 5; int f = 6; swap3(e,f); cout<< "e=" << e <<endl<<"f=" <<f<<endl;}