c语言编程

int x1=30,x2=40;
main()
{int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("%d,%d,5d\n",x3,x4,x1,x2);
}
sub(int x,int y)
{x1=x;x=y;
y=x1;}
结果为什么是10,20,40,40,求详解,为什么x1=40;谢谢

这是一个关于全局变量和局部变量以及函数参数的问题。
从两此sub函数的调用来解释:

sub(x3,x4)
此时,调用的sub()函数,x3和x4是main()函数的局部变量。分别是10和20。
所以,就相当于sub(10,20)。
在sub函数内部,则x=10, y=20。
在函数内,x1=x(10), x=y(20),y=x1(10)。
其实,x和y都因为是函数的参数,函数结束后也就没有作用了。
第一次运行sub(x3,x4)的作用是,使全局变量x1编程了10。

第二次sub(x2,x1)
经过同上,因此,x1就变成x的值,也就是传入的x2的值,是40。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-07
由于x1,x2为全局变量,所以经过函数调用,相当于传地址引用;
而x3,x4为局部变量,相当于传值引用,在函数调用后不发生变化;
所以sub(x3,x4)没对x3,x4造成变化;
调用sub(x2,x1):
X1=(X2=40);X2=(X1=40);X2=X1;
修改程序:
#include <iostream>
using namespace std ;

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

本数据来源于百度地图,最终结果以百度地图最新数据为准。

第2个回答  2009-09-06
int x1=30,x2=40;
。。。
sub(int x,int y)
{x1=x;x=y;
y=x1;}

x1 没有定义为局部变量,
所以会改变上面定义的那个全局变量。

int x int y 是参数,
相当于局部变量。
因为是值参,sub 的调用对参数没有修改。

sub(int & x,int & y)
{
int temp=x;
x=y;
y=temp;
}

这样写sub 会交换2个变量的值。
不过是 C++ 语法。
第3个回答  2009-09-06
我用vc6编译的。修改了一下。
#include<stdio.h>
int x1=30,x2=40;
sub(int,int);
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)
{
int temp;
temp=x;
x=y;
y=temp;
}

由于x1,x2,x3,x4均赋有初始值。
而做sub(x1,x2);sub(x3,x4)只是局部变量的运算。运算完之后,x1,x2,x3,x4的值均不改变。故结果为10,20,30,40。
如果要使其发生交换,必须用到指针。
相似回答