这是一道面试常考题,要注意的是,函数指针为void类型,注意转换。另一点是两个指针可能有交集,针对这一点,当Dest在Src左边时,从低位向高位复制,反之,从高位向低位倒序复制。另外当size大于Dest长度时将报错。
最简:
void* Memcpy(void *Dest, void *Src, unsigned int size){
if(Dest==nullptr||Src==nullptr)
return nullptr;
char* tempDest=(char*) Dest;
char* tempSrc=(char*) Src;
if(Dest<Src){
while(size--){
*(tempDest++)=*(tempSrc++);
}
}
else{
tempDest+=size-1;
tempSrc+=size-1;
while(size--){
*(tempDest--)=*(tempSrc--);
}
}
return Dest;
}
改进:地址对齐时以CPU字长来拷贝,不对齐时按字节拷贝
void* Memcpy(void *Dest, void *Src, unsigned int size){
if(Dest==nullptr||Src==nullptr)
return nullptr;
int* tempDest