考虑内存重叠问题,注意这里是一个字节一个字节的复制
/*
dst
src
*/
#include <iostream>
using namespace std;
void *memcpy(void *dst, const void *src, unsigned int n)
{
if(src==NULL){
dst = NULL;
return dst;
}
char* p_dst = (char*) dst;
char* p_src = (char*) src;
if(dst<src){
while(n--){
*p_dst++ = *p_src++;
}
}else{
p_dst += n-1;
p_src += n-1;
while(n--){
*p_dst-- = *p_src--;
}
}
return dst;
}
void printNums(int nums[], int n){
for(int i=0;i<n;i++){
cout<<nums[i]<<" ";
}
cout<<endl;
cout<<"-------------";
cout<<endl;
}
int main()
{
/*
无内存重叠
*/
int nums1[] = {1,2,3,4,5};
int nums2[] = {0,0,0,0,0};
memcpy(nums2,nums1,sizeof(nums1));
printNums(nums2,sizeof(nums2)/sizeof(int));
/*
/dest -------
/src -----
*/
// 1 2 3 4 5
// 1 2 1 2 3
//emcpy(nums1+2,nums1,3*);
//printNums(nums1,sizeof(nums1)/sizeof(int));
memcpy(nums1,nums1+2,3*sizeof(int));
printNums(nums1,sizeof(nums1)/sizeof(int));
}