memmove函数和memcpy函数的区别

C语言标准规定,memcpy用于拷贝不重叠空间。memmove用于拷贝重叠空间。重叠空间指的是拷贝内存空间和被拷贝内存空间重叠。举个例子,int arr[10] = {1,2,3,4,5,6,7,8,9,10};

把arr[4]后10个字节从arr[5]开始拷贝。这种情况我们应该使用memmove()函数来进行拷贝。

再讲一下memmove()函数的模拟实现。

 空间重叠一共存在三种情况

dest在src之前

 我想将678910放进34567的地址里。这里我们只需要从前往后放就行。6->3,7->4,8->5,9->6,10->7.

dest在src之后

 我想把34567放进678910的地址里,这里假如我继续从前往后放,3->6,4->7.5->8,这时候,之前的6已经变成3了,假如我继续放,取代9的数据是3而不是6,因此并不能达到我想要的效果。这里,只需要从后往前放就能解决。可能我讲的不好理解,大家在纸上写一下就能看懂。

dest与src相同

这种情况就不需要考虑从前往后放还是从后往前放。

模拟实现

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值