memcpy和memmove都是内存函数
memcpy:是C语言和C++中的拷贝函数,将源地址内存拷贝到目标区域中
从上面不难看出来,它返回的是void*类型;
其中它含有三个参数,第一个是拷贝目标;第二个是拷贝源头;第三个是拷贝的大小(单位是字节);
mommove:也是一个拷贝函数,当目标区域与源区域重叠时,它能保证源串在覆盖之前将重叠区域
的字节拷贝到源区域中,但复制后,源区域会被更改;当目标区域与源区域没有重叠,功能和memcpy相同;
从上面我们也可以看出,memmove函数返回的也是void*类型
其中它也含有三个参数,(同memcpy函数)
接下来我们来看看这两个函数怎么模拟实现吧
memcpy函数
把src里拷贝num个字节到dest里
(整个实现)
#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest, void* src, size_t num)
{
void* ret = dest;
assert(dest);
assert(src);
while (num--)//实现一个一个字节的拷贝过去
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[10] = { 0 };
my_memcpy(arr2, arr1, 20);//拷贝前5个数
//单位是字节所以是20;
for (int i = 0; i < 10; i++)
{
printf("%d", arr2[i]);
}
return 0;
}
memmove:
(整个函数的实现)
void* my_memove(void* dest, void* src, size_t num)
{
void* ret = dest;
assert(dest);
assert(src);
if (dest < src)//当目标区域不会与源区域重叠时
//从头往后一个一个字节拷贝
{
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else//当目标区域与源区域重叠时,
//从后往前一个一个字节的拷贝
{
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memove(arr1+2, arr1, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
这是我对这两个函数的理解,如果有错误,欢迎指出,小编新人,勿喷谢谢!!!