问题描述:
模拟实现memcpy()函数的功能。
解题思路:
memcpy()和strcpy()功能一样,只是memcpy()多了一个参数可以指定拷贝多少位。要实现其功能,需要考虑两种情况:
- 当拷贝字符长度大于被拷贝字符长度时,需要从拷贝长度 - 1处开始递减拷贝字符。
- 当拷贝字符长度小于被拷贝字符长度时,则直接从首地址依次递增拷贝。
实现代码:
void MyMemcpy(void *dst, const void *src, unsigned int len)
{
//关键字register,请求编译器优化它定义的变量,并且通常这种优化比人工优化的好
register char *d;
register char *s;
if(0 == len)
return dst;
if(dst > src)
{
d = (char *)dst + len - 1;
s = (char *)src + len - 1;
while(len >= 4) //循环展开,提高执行效率
{
*d-- = *s--;
*d-- = *s--;
*d-- = *s--;
*d-- = *s--;
len -= 4;
}
while(len--)
{
*d-- = *s--;
}
}
else if(dst < src)
{
d = (char *)dst;
s = (char *)src;
while(len >= 4)
{
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
len -= 4;
}
while(len--)
{
*d++ = *s++;
}
}
return dst;
}