原博客在https://www.cnblogs.com/god23bin/p/14711408.html
以下仅个人笔记,比较乱。建议去原作者那看,写的比较详细。
这俩参数都是一样的(void * destination, const void * source, size_t num),可参考其他博客。。。
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// 想把12345 拷贝到 34567上去
// 应该打印 1 2 1 2 3 4 5 8 9 10
memcpy实际结果是1 2 1 2 1 2 1 8 9 10
为啥呢?搜了好多,看不懂。。。
直到看到大神写的,非常感谢。刚学C语言,不知道理解是否正确,仅供参考
这种重叠区域拷贝是source的指针开始位置,des的指针开始位置一个一个copy,copy一个两个指针都移动一个位置,相当于两个指针指向的内存进行copy,但是重叠区域的地址会执行copy操作,memcpy会导致数据不对。所以有了memmove
memmove是看重叠是靠前的就倒序拷贝,重叠靠后的就顺序拷贝,避免重叠区域copy被已copy过的内存重新copy.///
但实际上clion用的编译器貌似优化过此问题,所以,俩函数操作结果都一样,不会出现错误。。。
实际copy是在同一个内存块,Source和Destination每次copy结束都是同样的值。。。
memmove则是倒序copy避免重叠区域345被提前copy替换。。。相反如果重叠区域是相反的就是Source与Destination换一下,把34567 拷贝到12345.就是 顺序copy