二、内存函数
1.memcpy函数
1.1memcpy函数的介绍
通过查询我们可知:用于将一段内存的内容复制到另一段内存区域。
1. 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
2. 这个函数在遇到 '\0' 的时候并不会停下来。
3. 如果source和destination有任何的重叠,复制的结果都是未定义的
1.2 memcpy函数的使用
将arr1中的40个字节的数据复制到arr2中
int main() { int arr1[] = { 1,2,3,4,5,6,7,8,9,0 }; int arr2[20] = { 0 }; memcpy(arr2, arr1, 40); int i = 0; for (i = 0; i < 20; i++) { printf("%d ", arr2[i]); } return 0; }
1.3模拟实现memcpy
void* my_memcpy(void* dest, void* src, size_t num) { void* ret = dest; while (num--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } return ret; } int main() { int arr1[] = { 1,2,3,4,5,6,7,8,9,10 }; int arr2[20] = { 0 }; my_memcpy(arr2, arr1, 40); int i = 0; for (i = 0; i < 20; i++) { printf("%d ", arr2[i]); } return 0; }
2.memmove函数
2.1memmove函数的介绍
通过查询我们可知:用于在内存中移动一段数据块的内容。
1. 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
2. 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
2.2memmove函数的使用
int main() { int arr1[10] = { 1,2,3,4,5,6,7,8,9,0 }; memmove(arr1 + 2, arr1, 20); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr1[i]); } return 0; }
2.3模拟实现memmove
void* my_memmove(void* dest, void* src,size_t num) { void* ret = dest; if (dest < src) { while (num--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } else { while (num--) { *((char*)dest + num) = *((char*)src + num); } } return ret; } int main() { int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 }; my_memmove(arr1, arr1+2 ,20); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr1[i]); } return 0; }