为了更好的复习,就将别人的博客链接放在这
https://blog.csdn.net/gogogo_sky/article/details/72593513
实现:
memcpy:
//模式实现memcpy(不能解决内存重叠的问题,正序拷贝,适用于任何类型)
void* MyMemcpy(void* dest,const void* src,size_t num)
{
assert(dest&&src);
char* dest_t=(char*)dest;//目标字符串
const char* src_t=(const char*)src;//源字符串
while(num--)
{
*dest_t++= *src_t++;
}
return dest;
}
memmove:
//模拟实现memove(会解决内存重叠的问题,加上了逆序拷贝,适用于任何类型)
void* MyMemmove(void* dest,const void* src,size_t num)
{
char* dest_t=(char*)dest;
const char* src_t=(const char*)src;
assert(dest&&src);
if (src_t>dest_t || src_t+num<=dest_t)//情况1和情况2
{
while(num--)//正序复制
{
*dest_t++=*src_t++;
}
}
else//情况3,逆序赋值
{
//调整指针到最后
dest_t+=num-1;
src_t+=num-1;
while(num--)
{
*dest_t--=*src_t--;
}
}
return dest;
}