可执行代码
#include
#include "stdafx.h"
#include
using namespace std;
void inplace_swap(int *x, int *y) {
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
void reverse_array(int a[],int cnt) {
int first, last;
for (first = 0,last = cnt - 1 ;first <= last; first++,last--)
{
inplace_swap(&a[first], &a[last]);
}
}
int main() {
int a[] = {1,2,3,4,5};
int len = sizeof(a) / sizeof(int);
reverse_array(a, len);
for (int i = 0; i",";
}
cout << endl;
int b[] = { 1,2,3,4 };
int len2 = sizeof(b) / sizeof(int);
reverse_array(b, len2);
for (int i = 0; i",";
}
cout << endl;
system("pause");
}
结果演示
A.对于一个长度为技术的数组,长度cnt=2k+1,函数reverse_array最后一次的循环中,变量first和last的值分别是什么
根据示例代码int a[] = {1,2,3,4,5};来进行讲解,此时变量为
咱们一步一步分析
void inplace_swap(int *x, int *y) {
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
此时inplace_swap(&a[first], &a[last]);传递的参数是什么呢?
inplace_swap(&a[2], &a[2]);
因为我们传送的是指针,所以现在我们int *x, int *y这两个变量指向的是同一个变量,知道了这个我们将变量替换进去后继续分析。
也就是图上所示结果
B.为什么这时调用函数inplace_swap会将数组元素设置为0?
上面已经讲的很清楚,这里不再解释
C.对reverse_array的代码做哪些简单改动就能消除这个问题?
修改很简单,就是把first <= last;改为first < last;
#include
#include "stdafx.h"
#include
using namespace std;
void inplace_swap(int *x, int *y) {
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
void reverse_array(int a[],int cnt) {
int first, last;
for (first = 0,last = cnt - 1 ;first < last; first++,last--)
{
inplace_swap(&a[first], &a[last]);
}
}
int main() {
int a[] = {1,2,3,4,5};
int len = sizeof(a) / sizeof(int);
reverse_array(a, len);
for (int i = 0; i",";
}
cout << endl;
int b[] = { 1,2,3,4 };
int len2 = sizeof(b) / sizeof(int);
reverse_array(b, len2);
for (int i = 0; i",";
}
cout << endl;
system("pause");
}