一道C语言问题,请各位高手们帮一下。

#include<stdio.h>intx1=30,x2=40;voidsub(intx,inty){x1=x;x=y;y=x1;}voidmain(){intx3=10... #include<stdio.h>
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",x3,x4,x1,x2);
}
运行结果是10,20,40,40.求解释。。。
展开
 我来答
百度网友7f4f28558
推荐于2017-12-16 · TA获得超过272个赞
知道小有建树答主
回答量:489
采纳率:0%
帮助的人:235万
展开全部
int x1=30,x2=40;
void sub(int x,int y)
{
x1=x;x=y;y=x1; // x,y值 交换,并且x1=x ,由于没有 返回值, 所以只有 那个
//全局 变量x1的 值 保留了下来
}
void main()
{
int x3=10,x4=20;
sub(x3,x4); // x1=x3=10 ,
sub(x2,x1); // // x1=x2=40 ,

// 最后结果x2,x3,x4值都没变只有 x1=x2=40 ,
printf("%d,%d,%d,%d",x3,x4,x1,x2);
}
追问
就是x1的返回值是40,还有点不明白。
“ // x,y值 交换,并且x1=x ,由于没有 返回值, 所以只有 那个
//全局 变量x1的 值 保留了下来”
那为什么X1返回值是40呢?
追答
在 sub 函数里 你又没定义 x1 ,所以 这个 x1  就是外面定义的 全局变量, 
第一次 调用 函数 我都 写了 x1=x3=10 ,
第二次调用 函数 我也写了 x1=x2=40 ,
你都没看吧?
百度网友916da11d
2012-03-08
知道答主
回答量:31
采纳率:0%
帮助的人:12.3万
展开全部
sub的形参与实参是值传递,所以不改变实参的值,所以X3,X4的值不变,而X1,X2是全局变量,在每个函数里都可以用,所以在sub中改变了X1的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
倜傥又漂亮的才子3702
2012-03-08
知道答主
回答量:9
采纳率:0%
帮助的人:1.4万
展开全部
其实这题很简单啊! 因为sub(x3,x4);调用函数 在sub(x3,x4);中把X3 和X4 是交换了 但是它只在sub(x3,x4);函数里有用 当再次运行到main()中时 它已经被析构了! 如果传地址用指针的话就真正的换了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2012-03-08 · TA获得超过109个赞
知道答主
回答量:87
采纳率:0%
帮助的人:43.4万
展开全部
sub(x3,x4);//运行时程序首先给x3、x4新建立一个空间,然后把值赋值给这两个空间,然后就和主程序没关系了……
你把sub程序改一下
void sub(int &x,int &y)
{
...//里面不变
}
这样就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式