不考虑性能的话,memcpy()在C99编译器下可以写为:
void *memcpy(void *restrict dest, const void *restrict src, size_t n)
{
int i;
const char *s = src;
char *d = dest;
assert(dest && src);
assert((src + n <= dest) || (dest + n <= src));
for (i = 0; i < n; i++)
d[i] = s[i];
return dest;
}
这里有几个得分点:
这里的几个关键点解释如下:
- src指针前面要加const,暗示src是输入参数;
- src和dest是非重叠内存,restrict关键字暗示编译器可以优化内存访问的编译;
- 断言(assert) src和dest非空,拷贝的源头和目的地非重叠,程序员要理解出错处理和断言的区别;
- 返回void *。