您的位置:首页 > 其它

内存移动:memmove原理模拟实现

2017-10-06 17:32 253 查看
【移动内存】 阅读下列程序说明和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 <
4000
; 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:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: