一、memmove函数的介绍
由图可知memmove函数的返回值是void*,void*的指针可以接收任何类型的地址。destination是目标空间,source是原空间,这个函数的作用就是将原空间的num个大小字节的空间复制到destination上去。这个函数与memcpy函数相似,这个函数的特点是在复制的时候允许原空间和目标空间又重叠的部分。切记num的空间是以字节为单位的,例如我们要复制5个整型大小空间的内容,这是num不是5,而是20。因为每个整型占四个字节。
二、memmove函数的使用
memmove函数的使用需要包含<string> 的头文件,上述代码是把数组下标为2开始向后的5个整型数字复制到数组下标为1开始向后5个大小整型空间里。
三、memmove函数的模拟实现
让我们先讨论src<dest的情况
让我们先来看这种情况,这种复制是从src从前往后复制的,但是最后一次复制的时候原本应该将数字5复制到 数字8的位置上,但是此时原本数字5的位置已经发生改变,已经被覆盖了,此时原本数字5的位置已经变为2,这是就发生错误。那正确的是什么呢?
这时我们从src的最后一个开始即从数子5开始,把5放到8的位置,依次执行,这样就避免了覆盖的问题。
接下来我们讨论src>dest的情况
同理当我们从后向前的时候当复制到数字5的时候,原本我们要讲数字5复制到数字3的位置,但此时5已经变为7,它们发生了覆盖 ,此时就是错误的。
那正确的应该是什么样的呢?
那当然是从前往后就可以解决啦!
这样就可以解决上述问题啦
于是我们可以得出结论,当src<dest时可以采用从后往前(针对src的位置)复制 ,当src>dest时我们可以采用从前往后复;接下来让我们看代码
当我们主函数调用时,例如:
这样就成功了。
我今天的分享就到此为止,如果上述有错误,希望各位读者不吝赐教,欢迎各位来指正,让我们一起进步吧!