模拟实现memmove函数

分析

memmove是内存移动函数,我们现在要将数组中的1,2,3,4拷贝到3,4,5,6的位置即
这里写图片描述
如果不考虑反向拷贝则会变成
这里写图片描述
原来3,4的位置已经被修改成1,2,所以无法实现
你会发现上面目标3所在的位置大于源1所在的位置,则需要反向从后向前拷贝,即不会发生冲突,可实现正确拷贝
这里写图片描述

dest指代的是目标,src指代源。
代码如下

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void * my_memmove(void * dest,const void * src,size_t count)
{
    void * ret = dest;
    assert(dest!=NULL);
    assert(src!=NULL);
    if(dest<src)
    {
        //前--后
        while(count--)
        {
            *(char*)dest = *(char*)src;
            dest = (char*)dest+1;
            src = (char*)src+1;

        }
    }
    else
    {    //从后向前
        while(count--)
        {
            *((char*)dest+count) = *((char*)src+count);
        }
    }
        return ret;
}

测试代码

int main()
{
    int arr1[]={1,2,3,4,5,6,7,8,9};
    int i = 0;
    for(i=0;i<9;i++)
    {
        printf("%d ",arr1[i]);
    }
    printf("\n");
    my_memmove(arr1+2,arr1,16);
    for(i=0;i<9;i++)
    {
        printf("%d ",arr1[i]);
    }
    system("pause");
    return 0;

}

实现结果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sister_wang0712/article/details/80213472