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

来源:互联网 发布:禁止外资参与网络出版 编辑:程序博客网 时间:2024/06/14 10:51

【移动内存】 阅读下列程序说明和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:

原创粉丝点击