C内存函数的模拟实现

        本文模拟实现c内存函数memcpy和memmove函数,在实现原理上两个函数略有不同,memcpy不能处理重叠内存的拷贝,memmove函数可以处理重叠内存的拷贝。

函数1:memcpy

memcpy函数原型为:void *memcpy( void *dest, const void *src, size_t count );

参数1:dest为目的地空间起始地址

参数2:src为源空间起始地址

参数3:count为拷贝字节数

函数作用就是把原空间的count个字节数拷贝到目的地空间

例如:把arr数组里面5个int元素拷贝到arr2里面:

运行结果:

具体实现代码:

        只需要一个字节一个字节的拷贝就可以,把void* 强转成char*

void* my_memcpy(void* dest, const void* src, int count)
{
    void* ret=dest;
    while(count--)
    {
        *(char*)dest=*(char*)src;
        dest=(char*)dest+1;
        src=(char*)src+1;
    }

    return ret;
}

 

函数2:memmove

memmove函数原型为:void *memmove( void *dest, const void *src, size_t count );

参数1:dest为目的地空间起始地址

参数2:src为源空间起始地址

参数3:count为拷贝字节数

函数作用就是把原空间的count个字节数拷贝到目的地空间,但是可以处理重叠内存拷贝

例如:在数组内部拷贝6个int数据,如下图所示:

情况1运行结果:

 情况2运行结果:

具体实现代码: 

void* my_memmove(void* dest, const void* src, int count)
{
    void* ret=dest;
    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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士就是菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值