C语言内存函数之 memcpy和memmove函数

memcpy函数的记忆方法:mem表示内存类函数,属于头文件string.h里面的函数。cpy是copy的缩写,表示对内存数据进行拷贝。

memcpy函数的输入值和返回值:void*  my_memcpy(void*brr,void*arr,size_t v)  memcpy的输入值分别是被拷贝数据的brr的无类型数组的首地址,然后是拷贝给别人的无类型数组的首地址arr,最后是size_t类型的需要拷贝的字节数v。

memcpy函数的自我实现:

void*  my_memcpy(void*brr,void*arr,size_t v){
    for (int x = 0; x < v; x++) {     //用v来限制x的自增大小最值,x来确定拷贝的地方
        *((char*)brr + x) = *((char*)arr + x);  //用强制类型转换来一个字节一个字节的拷贝,以char类                                                                     型来强制类型转换刚好可以一个字节一个字节的搬运内                                                                      存数据。
    }
    return brr;                                 //最后返回无类型的地址brr,所以接受的时候注意强制类型转换
}

memmove函数的记忆方法:mem表示内存类函数,属于头文件string.h里面的函数。move表示搬运,和拷贝的意思是差不多的,但是它复制的方向和memcpy不同。

memmove函数的传入值和返回值:void* my_memmove(void* brr, void* arr, size_t v)

这里 和strcpy函数是相同的。

memmove函数的自我实现:

void* my_memmove(void* brr, void* arr, size_t v) {
    for (int x = v - 1; x >= 0; x--) {   //这里就是把赋值的顺序反过来了
        *((char*)brr + x) = *((char*)arr + x);
    }
    return brr;
}
 

为什么要这么能呢?

肯定有其原因:

如果现在你要把123向后移动两位,你要怎么做呢?如果你是把1先放在3处,再把2放在4处,你要移动3发现你的3被1覆盖了。所以这里就可以看出我们从前向后复制是不能用memcpy的。那么我们用memmove呢,先移动3到5,再移动2到4,再是1到3。发现完全没有问题。那么如果我们把3 4 5向前移动2位能不能用memmove呢,答案是不行的,你们可以自行试一试。这里就要相反来搞了,用memcpy。

那么我们能不能自己设定一个函数来将两个函数的功能结合起来呢?

当然是可以的。我们观察上面两种情况,发现就是一个在前一个在后的问题,在前的如果复制到后面去就要先从后面赋值。反之就应该前面的先复制到前面去。

代码实现:

做一个判断就行了。

最近更新

  1. TCP协议是安全的吗?

    2024-03-22 03:56:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-22 03:56:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-22 03:56:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-22 03:56:02       18 阅读

热门阅读

  1. 打印租赁行业现状与未来发展趋势分析

    2024-03-22 03:56:02       24 阅读
  2. 发现开源宝藏——stepui

    2024-03-22 03:56:02       20 阅读
  3. C++——类和对象(上)

    2024-03-22 03:56:02       21 阅读
  4. PCL拟合并绘制平面(一)

    2024-03-22 03:56:02       19 阅读
  5. DPDK系列之四十二DPDK应用网络编程

    2024-03-22 03:56:02       21 阅读
  6. 深入理解数据结构森林

    2024-03-22 03:56:02       23 阅读
  7. texStudio用Springer模板排坑

    2024-03-22 03:56:02       23 阅读
  8. 【leetcode】动态规划专题

    2024-03-22 03:56:02       16 阅读
  9. 使用Tesseract识别中文 并提高精度

    2024-03-22 03:56:02       19 阅读
  10. React面试题

    2024-03-22 03:56:02       15 阅读