|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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存在的问题呢?
详细答案(回复可见):
|
|