一道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.求解释。。。 展开
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.求解释。。。 展开
4个回答
展开全部
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);
}
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 ,
你都没看吧?
展开全部
sub的形参与实参是值传递,所以不改变实参的值,所以X3,X4的值不变,而X1,X2是全局变量,在每个函数里都可以用,所以在sub中改变了X1的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实这题很简单啊! 因为sub(x3,x4);调用函数 在sub(x3,x4);中把X3 和X4 是交换了 但是它只在sub(x3,x4);函数里有用 当再次运行到main()中时 它已经被析构了! 如果传地址用指针的话就真正的换了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sub(x3,x4);//运行时程序首先给x3、x4新建立一个空间,然后把值赋值给这两个空间,然后就和主程序没关系了……
你把sub程序改一下
void sub(int &x,int &y)
{
...//里面不变
}
这样就可以了
你把sub程序改一下
void sub(int &x,int &y)
{
...//里面不变
}
这样就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询