当前位置: 代码迷 >> C语言 >> 变量作用域程序:输出结果?(已解决)
  详细解决方案

变量作用域程序:输出结果?(已解决)

热度:99   发布时间:2007-10-28 12:11:23.0
变量作用域程序:输出结果?(已解决)

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  sub  结果  

----------------解决方案--------------------------------------------------------
LZ的程序很不合规范,要改改
程序代码:

int x1=30,x2=40;
void sub(int x,int y)
{
x1=x;x=y;y=x1;
}
int main()
{
int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf(\"%d,%d,%d,%d\n\",x3,x4,x1,x2);
return 0;
}

再说说这个题目,其实sub函数跟下面这样写没什么区别
程序代码:

void sub(int x,int y)
{
x1=x;
}

----------------解决方案--------------------------------------------------------
以下是引用yqiong在2007-10-28 12:11:23的发言:

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编辑过]


----------------解决方案--------------------------------------------------------

很清楚了!
我觉得!
还的看LZ的了@!
总的来说是函数的生命周期!


----------------解决方案--------------------------------------------------------

恩,明白了


----------------解决方案--------------------------------------------------------
  相关解决方案