内存函数和字符串函数相比更加灵活,模拟实现内存函数也可以加深对于内存的理解,今天我们就来介绍一下三个常见的的内存函数吧。

1.memcpy(内存拷贝函数)

【内存函数的介绍】->memcpy、memmove、memcmp_内存拷贝

  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置;
  • 这个函数在遇到'\0'的时候并不会停下来;
  • 如果source和destination有任何的重叠,复制的结果都是未定义的

【内存函数的介绍】->memcpy、memmove、memcmp_sort函数_02

memcpy函数还是比较好理解的,所以我们直接模拟实现一下:

【内存函数的介绍】->memcpy、memmove、memcmp_未定义_03

关于void*,在之前的qsort函数时已经说过了,还不熟悉的朋友可以看一下之前的博客。



2.memmove

【内存函数的介绍】->memcpy、memmove、memcmp_sort函数_04

  • 和memcpy的差别就是memmove处理的源内存块和目标内存块是可以重叠的
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理

【内存函数的介绍】->memcpy、memmove、memcmp_内存拷贝_05

接着我们来模拟实现一下memmove:

【内存函数的介绍】->memcpy、memmove、memcmp_内存拷贝_06

最重要的是将dest<src和dest>=src进行分析,找出其中的规律。



3.memcmp

【内存函数的介绍】->memcpy、memmove、memcmp_未定义_07

  • 比较从ptr1和ptr2指针开始的num个字节
  • 返回值如下:

【内存函数的介绍】->memcpy、memmove、memcmp_sort函数_08

【内存函数的介绍】->memcpy、memmove、memcmp_内存拷贝_09