#include <stdio.h>
#include<string.h>
//memmove模拟实现-------------------------------- ---
void* my_memmove(void* dest, const void* scr, size_t num)
{
//进行分类讨论
char* ret = (char*)dest;
//情况1:dest scr 从前向后换
if (dest < scr)
{
while (num--)
{
*(char*)dest = *(char*)scr;//要解引用
dest = (char*)dest + 1;//目前较为合理的方式 “dest++(不行)”,因为dest是void*类型
scr = (char*)scr + 1;
}
}
else// scr dest 从后向前换
{
while (num--)//num相当于一个计数器 后置--,先判断num是否为零,再--
{
// *(char*)dest+num =* (char*)scr + num;
*((char*)dest + num) = *((char*)scr + num);
}
return ret;//返回dest首元素地址
}
}
int main()
{
int arr1[30] = {1,2,3,4,5,6,7,8,9,10};
int arr2[] = {0};
//my_memmove(arr1+2, arr1, 20);//1 2 1 2 3 4 5 8 9 10
my_memmove(arr1, arr1 + 2, 20);//3 4 5 6 7 6 7 8 9 10
for(int i=0;i<10;i++)
{
printf("%d ", arr1[i]);
}
return 0;
}