一.函数简介
strcpy用于拷贝字符串,而memcpy用于拷贝内存,这样既可以拷贝整形,浮点型,字符型,
引用头文件#include<string.h>
函数声明:
void * memcpy ( void * destination, const void * source, size_t num );
destination:目标空间
source:拷贝空间
num :字节数
返回值:无符号指针类型
事例:
1. #include<stdio.h> 2. #include<string.h> 3. int main() 4. { 5. int arr1[20]={1,2,3,4,5,6,7,8,9}; 6. int arr2[20]={0}; 7. memcpy(arr2,arr1,36); 8. for(int i=0;i<9;i++) 9. { 10. printf("%d ",arr2[i]); 11. } 12. return 0; 13. }
二.模拟实现memcpy
1. #include<stdio.h> 2. #include<assert.h> 3. void my_memcpy(void* dest,void* src,size_t num) 4. { 5. assert(dest&&src);//断言,避免dest&&src为空指针 6. while(num--) 7. { 8. *(char*)dest=*(char*)src; 9. dest=(char*)dest+1; 10. src=(char*)src+1; 11. } 12. } 13. int main() 14. { 15. int arr1[20]={1,2,3,4,5,6,7,8,9,10}; 16. int arr2[20]={0}; 17. my_memcpy(arr2,arr1,36); 18. for(int i=0;i<9;i++) 19. { 20. printf("%d ",arr1[i]); 21. } 22. return 0; 23. }
由于这里拷贝的类型不是单一的,所以我们设计的时候,就不能只设计一种拷贝的算法,
整形,浮点型,字符型他们的空间大小不一样,但是它们基本的大小空间是一个字节,所以我们把搜需要拷贝的变量强制转化为(char*)字符指针类型,然后一个字节一个字节拷贝,如*(char*)dest=*(char*)src;,这样就可以满足拷贝变量的多样化