黑马程序员技术交流社区

标题: 关于交换变量的理解 [打印本页]

作者: 郭佳佳    时间: 2012-7-8 22:55
标题: 关于交换变量的理解
谁能形象的说下对int a; int b; int temp; temp=a a=b a=temp;的理解  
作者: 韩迎龙    时间: 2012-7-8 23:22
这个很好理解啊,举个例子吧,假如你有一个苹果int a,你朋友有一个西瓜int b,你想要交换一下,但是不能互相交换,这时候你只能借助第三方的东西了,比如你有一个桌子int temp,这时候你就可以这样交换了,你先把你的苹果放在桌子上面,这样你的手里面现在上面没有temp=a,然后你朋友将西瓜给你,这样你就又水果了,但是你同朋友就空手了,这样的话a=b,然后你朋友可以从桌子上面拿起来那个苹果,这样b=temp,这样就完成了交换!
作者: 秦永辉    时间: 2012-7-9 09:26
这就像有两个杯子,A杯装的是酒,B杯装的是水,你想把A杯里的酒装到B杯里面,把B杯里的水装到A杯里面,如果不借助于另外一个C杯子你可以做到吗?你必须首先将A杯到进C杯,然后B杯的水才能到进A杯,最后把C杯的就到进B杯,到此就完成了,C杯只不过是一个中介而已!
作者: 秦永辉    时间: 2012-7-9 09:32
就程序而言,temp=a;此时temp就是原来a的值,此时a的值为空或0
a=b;此时把b的值赋值给a,此时的a的值就是原来b的值
b=temp;因为temp此时的值是原来a的,把temp赋值给b,此时b的值就等于a的初始值,到此为止a,b的值就实现互换
作者: 侯慧杰    时间: 2012-7-9 09:32
秦永辉 发表于 2012-7-9 09:26
这就像有两个杯子,A杯装的是酒,B杯装的是水,你想把A杯里的酒装到B杯里面,把B杯里的水装到A杯里面,如果 ...

这个回答好,很形象!很生动!
作者: 秦永辉    时间: 2012-7-9 09:38
侯慧杰 发表于 2012-7-9 09:32
这个回答好,很形象!很生动!

重在理解!
作者: 许庭洲    时间: 2012-7-9 13:31
int a;
int b;
int temp;  //定义中间变量
temp=a ;//先把变量a的值赋值给变量temp
a=b ;    //由于变量a为空,就把变量b的值赋值给变量a
b=temp;  //由于变量b为空,就把变量temp的值赋值给变量a,最后实现了变量a和b的值交换
作者: 夏威夷海风    时间: 2012-7-26 21:30
int a=1; 可以理解为左手拿了个苹果
int b=2;可以理解为右手拿了个苹果

好 状态已经准备好了,现在要交换这两个手上的东西,怎么办了,我就自己这两只手交换,肯定会掉一个。 我得跟张三说,嗨 ,张三 你先帮我拿下苹果————这里张三伸出来的一只手就是你那里的temp
作者: 梁少辉    时间: 2012-7-28 09:26
很好理解。这就是一个变量的交换。temp就相当如一个中间量。当把a的值赋给了temp后,也就是temp的值为a,那么此时a的值就为0。然后就是把b的值赋给a,此时a的值就变成了b。这里的b=temp,也是就是把temp中a的值重新赋值给b。那么b中的值也就是a了。这样就实现了a和b的交换。
作者: xiaokaicn    时间: 2012-7-28 10:23
支持  呵呵呵
作者: 陈汉维    时间: 2012-7-28 12:35
int a;
int b;
int temp;
temp = a;//把a变量中的值先赋给tamp
a = b;//然后把b变量中的值赋给a,a中的值就被覆盖为b中的值
b = temp;//然后再把temp中的值(原先a中的值)赋给b。
这样看应该很好理解
如果不使用第三方变量的话,推荐适用异或运算
a = a^b;
b = a^b;//b=(a^b)^b=a
a = a^b;//a=a^(a^b)=b
这种方法更高效。
作者: 吴清华    时间: 2012-7-28 21:40
有a、b、c三个杯子,a中装满了水,b杯中装满啤酒,c杯是空的,三个杯子容积一样大,现在要把a、b中的液体交换,先把a中的水倒到c中,把b杯中的啤酒倒到a中,再把c杯中的水倒到c杯中,这样就完成了交换。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2