1.代码实现C语言库函数memcpy(两个数据内存不存在交集)
代码在clion软件通过编译
memcpy函数不限制原数据类型和目标数据类型 只是操作用户输入的内存空间的数据
#include<stdio.h>
#include<assert.h>
void * my_memcpy(void *des,const void *src,size_t number)
{
assert(des!=NULL);//假如指针是空直接不执行下面代码的操作
assert(src!=NULL);
char *arr=des;
while(number--)
{
*(char*)des=*(char*)src;
(char*)des++;
(char*)src++;
}
return arr;
}
int main(){
int arr1[10]={1,2,3,4,5,6,7};
int arr2[10]={0};
my_memcpy(arr2,arr1,sizeof(arr1));
for(int x=0;x<9;x++)
printf("%d\n",arr2[x]);
return 0;
}
2.代码实现C语言库函数memcpy(两个数据内存存在交集)
代码在clion软件通过编译
#include<stdio.h>
#include<assert.h>
void * my_memcpy(void *des,const void *src,size_t number)
{
assert(des!=NULL);
assert(src!=NULL);
char *arr=des;
//假如目的空间在源空间之前可以依次将源头数据复制到目的空间
if(*(char*)des<*(char*)src) {
while (number--) {
*(char *) des = *(char *) src;
(char *) des++;
(char *) src++;
}
}
//假如目的空间在源空间之后则要考虑到源空间处的数据会在依次复制中
//改变,那便需要将重叠部分的内容先移到目的空间最后
//| ① | ② | ③ | ④ | ⑤ |
//|---src-----| 需要先将③移动到⑤的位置
// |--des--|依次复制的顺序③->⑤ ②->④ ①->③
else{
while (number--) {
*((char *) des+number) = *((char *) src+number);}
}
return arr;
}
int main(){
int arr1[10]={1,2,3,4,5,6,7,8,9,10};
my_memcpy(arr1,arr1+2,20);
for(int x=0;x<10;x++)
printf("%d\n",arr1[x]);
return 0;
}