码迷,mamicode.com
首页 > 其他好文 > 详细

写一个memcpy()函数你能拿几分?

时间:2015-12-01 19:37:22      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

不考虑性能的话,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;
}

这里有几个得分点:

技术分享

这里的几个关键点解释如下:

  1. src指针前面要加const,暗示src是输入参数;
  2. src和dest是非重叠内存,restrict关键字暗示编译器可以优化内存访问的编译;
  3. 断言(assert) src和dest非空,拷贝的源头和目的地非重叠,程序员要理解出错处理和断言的区别;
  4. 返回void *。


最后的一个拷贝的for循环全部做对,本题得分为0。



写一个memcpy()函数你能拿几分?

标签:

原文地址:http://blog.csdn.net/21cnbao/article/details/50132131

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!