{:1_1:}
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的时候,不执行交换函数就行了。
头尾对调的部分不懂,感觉很有意思
看看什么意思????
{:1_1:}
{:1_1:}111111111111111116
看看答案
楼主加油,鱼C加油!我们都看好你哦!
激动人心,无法言表!
2.中间的0是由于swap函数中,指针x和y指向同一个内存位置,所以三条语句都是两个相同的数进行异或,故最终*x,*y都为0.
3.将for语句中截止条件改为first<last.
答案
真是难得给力的帖子啊。
强烈支持楼主ing……
回复看答案
强烈支持楼主ing……
可以这样修改,不知道原来代码的错误
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);
}
}
强烈支持楼主ing……
来学习..........................
enenen!!!!!!!!!!!!!!!!!!!!!
mark