变量作用域程序:输出结果?(已解决)
int x1=30,x2=40;
main()
{ int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
}
sub(int x,int y)
{x1=x;x=y;y=x1;}
答案为10,20,40,40,想不通为什么x2为40。我认为应该是30才对呀!
[此贴子已经被作者于2007-10-28 12:58:14编辑过]
int x1=30,x2=40;
void main()
{
int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
}
sub(int x,int y)
{
x1=x;
x=y;
y=x1;
}
答案为10,20,40,40,想不通为什么x2为40。我认为应该是30才对呀
sub函数每次都只修改全局变量x1的值。所以最后x1的值为40和sub(x2,x1)中x2的值一样。
提示:
要想子函数更新实参值不能用值传递的方式。应该用引用。
修改程序如下:
#include<stdio.h>
int x1=30,x2=40;
void sub(int &,int &);
void main(void)
{ int x3=10,x4=20;
sub(x3,x4);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
//输出20,10,10,40
sub(x2,x1);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
//输出20,10,40,40
}
void sub(int &x,int &y)
{
x1=x;
x=y;
y=x1;
}
不知道说清楚没有?
[此贴子已经被作者于2007-10-28 12:48:31编辑过]