什么时候会发生内存重叠呢?
  满足 :
  1:src<dst<=src+n会发生重叠,需要反序拷贝。
  2:当src>dst或者dst<src+n则不会发生内存重叠,此时 正序拷贝/反序拷贝皆可。
  所以可以进一步简化为:
  1:src>dst正序拷贝
  2:src<dst反序拷贝
  3:src=dst不拷贝
  【上面提供了两种方式,本文我们简单点,将会采用第二种方式进行代码实现。】
  下面是memmove的真正介绍了。
  /*************************************************/
  4.memmove函数
  /*************************************************/
  1原型:
  void *memmove( void* dest, const void* src, size_t n );
  其中:n为指定的拷贝的字节长度。
  2定义
  memmove用于从src拷贝n个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
  3拷贝终止条件:
  已经复制了n个字节
  4代码实现
  void* mymemmove(void *dst,const void *src,unsigned int n)
  {
  assert(dst!=NULL&&src!=NULL);
  char* pdst=(char*)dst;
  const char* psrc=(const char*)src;
  if(pdst<psrc)//正序
  {
  while(n--)
  {
  *pdst++=*psrc++;
  }
  }
  else if(pdst>psrc)//反序
  {
  psrc=psrc+n-1;//边界要考虑好。
  pdst=pdst+n-1;
  while(n--)
  {
  *pdst--=*psrc--;
  }
  }
  return dst;
  }