首页 > 试题广场 >

假定某个实现数组元素倒置的函数reverse_array调用

[问答题]
假定某个实现数组元素倒置的函数reverse_array调用了上题中给出的xor_swap函数:
1    void reverse_array(int a[],int len)
2    {
3            int left,ringt=len-1;
4            for(left=0;left<=right;left++,right--)
5                xor_swap(&a[left],&a[right]);
6    }
当len为偶数时,reverse_array函数的执行没有问题。但是,当len为奇数时,函数的执行结果不正确。请问,当len为奇数时会出现什么问题?最后一次循环中的left和right各取什么值?最后一次循环中调用xor_swap函数后的返回值是什么?对reverse_array函数做怎样的改动就可以消除该问题?

出现数组中间元素为0的问题。
最后一次循环时left 等于 right。xor_swap函数是通过异或运算来实现元素交换:
*a = *a^*b;
* b = *a^*b; 
*a = *a^*b;
此时*a与*b相等。异或运算x^x = 0
所以结果为0
应将for循环中判断条件left<= right 改为left<right即可
编辑于 2022-01-16 22:13:44 回复(0)