bluegyfrys
发表于 2015-2-15 10:57:27
看看学习一下~
bricker
发表于 2015-3-13 20:41:47
{:1_1:}
weiqi7777
发表于 2015-3-14 14:18:41
1、
使用异或 能对两个整数 进行交换。
原理是a = a^b^b
第一步*y = *x ^ *y
第二步*x = *x ^ *y = *x ^ *x ^ *y = *y ,就把*y的值交给*x
第三步*y = *x ^ *y = *y ^ *x ^ *y = *x,就把*x的值交给*y了
2、
当输入是1,2,3,4,5,的时候,最中间的一次交换 是 把 3的值和3的值交换,
这个时候就出现问题,因为传递给函数的*x和*y的x,y地址是一样的。所以对其中
任何一个值修改,都会对另外一个进行修改
当进入到函数后,*x和*y的地址是一样,值都为3.
执行完第一步, *y = *x ^ *y *y 的值是0因为3^3 = 0
但是因为x,y地址是一样,所以*x的值也是0了。
所以后面两步执行下来,结果就把*x和*y的值都改为0了,所以结果有0
3、
代码只要如果 first == last的时候,不执行交换函数就行了。
谁也不欠谁
发表于 2015-3-24 15:52:43
头尾对调的部分不懂,感觉很有意思
huangturen
发表于 2015-3-25 12:55:05
看看什么意思????
世界人生
发表于 2015-3-26 15:54:04
{:1_1:}
stopit
发表于 2015-3-27 09:27:51
{:1_1:}111111111111111116
无情一刀
发表于 2015-3-28 22:00:10
看看答案
10号的UV
发表于 2015-3-29 21:31:24
楼主加油,鱼C加油!我们都看好你哦!
YANOTME
发表于 2015-4-1 18:44:52
激动人心,无法言表!
晴天般微笑2015
发表于 2015-4-5 20:19:26
2.中间的0是由于swap函数中,指针x和y指向同一个内存位置,所以三条语句都是两个相同的数进行异或,故最终*x,*y都为0.
3.将for语句中截止条件改为first<last.
183715043
发表于 2015-4-7 11:01:48
答案
xbl179909
发表于 2015-4-7 14:34:42
真是难得给力的帖子啊。
王国庆
发表于 2015-4-19 00:03:41
强烈支持楼主ing……
修止符
发表于 2015-4-26 15:46:26
回复看答案
jahdhads
发表于 2015-4-26 19:18:43
强烈支持楼主ing……
jahdhads
发表于 2015-4-26 19:20:19
可以这样修改,不知道原来代码的错误
void reverse_array(int a[], int count)
{
int first, last;
for( first=0, last=count-1; first <= last; first++, last-- )
{
if(first == last);
else
inplace_swap(&a, &a);
}
}
yaoweifei
发表于 2015-4-28 23:54:58
强烈支持楼主ing……
搓鱿鱼
发表于 2015-5-7 10:54:06
来学习..........................
xjb0202
发表于 2015-5-13 10:30:14
enenen!!!!!!!!!!!!!!!!!!!!!