【移动内存】 阅读下列程序说明和C代码,在下划线“__”处填入语句。
【程序说明】子程序Move是将地址为A开始的N个存储单元 移动到地址为B开始的N个存储单元中,对于两个区域重叠的情况也能正确处理。
【温馨提示】分为三种情况考虑,一种相等不处理,一种是顺序操作肯定不会重叠,最后一种…;后面两种需要调用Save函数,该函数已经编写完成。
#define MAX 100 /* 总共在100个数据中处理 */
#define N 10 /* 两个存储单元长度为10个单位 */
int *A, *B;
void Save(int *a, int *b, int Step)
{
for (int i = 0; i < N; i++)
{
*b = *a;
a += Step;
b += Step;
}
}
void Move()
{
int *a, *b, Step;
a = A;
b = B;
if (a == b)
{
return;
}
else if (_____)
{
__________;
__________;
__________;
}
else
{
__________;
}
Save(a, b, Step);
}
int main(void)
{
int i, Array[MAX];
random(); /* 初始化随机数因子,random(int X)返回不小于0,
不大于X的随机整数 */
A = &Array[random(MAX - N)];
B = &Array[random(MAX - N)];
for (i = 0; i < N; i++)
A[i] = i;
Move();
return 0;
}
【图解分析】
//TODO:
1、Save函数功能分析
2、三种情况分析
【分析结果】
if (a == b)
{
return;
}
else if ((a - b < 0) && (a - b > -N))
{
a += N-1;
b += N-1;
Step = -1;
}
else
{
Step = 1;
}
【总结】
//TODO: