|  | 
 
| 
题目:
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 
 复制代码void inplace_swap(int *x, int *y)
{
        *y = *x ^ *y;
        *x = *x ^ *y;
        *y = *x ^ *y;
}
void reverse_array(int a[], int count)
{
        int first, last;
        
        for( first=0, last=count-1; first <= last; first++, last-- )
        {
                inplace_swap(&a[first], &a[last]);
        }
}
 以上代码段的作用是将数组a的元素头尾两端依次对调,那么有如下问题:
 
 1. 解释下inplace_swap()利用异或能实现两数交换的原理?
 
 2. 当数组中包含数字1,2,3,4时,代码可以正常运行,得到4,3,2,1。但如果数组中包含1,2,3,4,5时,你会发现结果是5,4,0,2,1。请问中间的0是从何而来的?
 
 3. 对reverse_array的代码做哪些简单改动就能消除题目2存在的问题呢?
 
 
 详细答案(回复可见):
 
 
 | 
 |