各位大侠能解释下下面这段内存拷贝函数吗?

wohu007 2012-04-18 09:57:25

写函数完成内存的拷贝 一个内存拷贝函数的实现体

解释下各行的含义,小弟实在是看不懂


void *memcpy(void *pvTo,const void *pvFrom,size_t size)

{

assert((pvTo!=NULL)&&(pvFrom!=NULL));

byte *pbTo=(byte*)pvTo;
byte *pbFrom=(byte*)pvFrom;

while (size-- >0)

*pbTo++ = *pbForm++;
return pvTo;
}
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken_scott 2012-04-19
  • 打赏
  • 举报
回复
第一句叫断言, assert(表达式); 表达式的值必须为真(pvTo和pvFrom都不能为空指针), 否则程序会在这一行报错退出(原因是 不能对空指针解引用 (*NULL))
第二, 第三句就是类型转换了, 理由是(void *)的指针移动(++/--/+=/-=)不知道要移动多大, 所以(void *)类型的指针是不能移动的, 所谓内存拷贝(按字节拷贝), 就是拷贝后 目的对象与源对象 的各字节都相同, 所以, byte是一个字节大小的类型, 比如char, unsigned char, signed char什么的, 通常byte是个typedef:
typedef unsigned char byte;
后面两行相当与:
while (size > 0) {
*pbTo = *pbFrom; /* 将pbTo指向字节的值 置成 pbFrom指向字节的值 */
++pbTo; /* pbTo指向目的对象的下一个字节 */
++pbFrom; /* pbFrom指向源对象的下一个字节 */
--size;
}
应该明白了吧
猪头小哥 2012-04-18
  • 打赏
  • 举报
回复
你程序看不懂得话就用铅笔画图,把它的流程走一遍,我个人觉得这是个很好的学习方法,为什么是用铅笔,因为它修改起来容易,书面效果也很好的,可以试试吧!
猪头小哥 2012-04-18
  • 打赏
  • 举报
回复
C语言里面没有byte*类型吧?我前几天也看到这个程序了,在vs里面有错误,说byte *没定义什么的!
独自听枫 2012-04-18
  • 打赏
  • 举报
回复
就是进行拷贝赋值啊,有啥看不懂的,不过BYTE应该是unsigned char类型的吧

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧