memcpy模拟实现
void my_memcpy(const void* dest, const void* src, size_t num)//参数类型为void是因为该函数可接受所有类型参数
{
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
}
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8 };
int arr2[20] = { 0 };
my_memcpy(arr2, arr1, 20);//第一个参数为目标数组,第二个参数为要拷贝的数组,第三个参数为拷贝的字节个数
for (int i = 0; i < 20; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
memmove模拟实现
void* my_memmove( void* dest, const void* src, size_t num)//参数类型为void是因为该函数可接受所有类型参数
{
void* ret = dest;
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_memmove(arr1+2, arr1, 20);//第一个参数为目标数组,第二个参数为要拷贝的数组,第三个参数为拷贝的字节个数
for (int i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}