提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、内存函数是什么

二、内存函数的分类(常见)

1.memcpy

memcpy的模拟实现

2.memmove

memmove的模拟实现

3.memset

模拟实现:

4.memcmp

总结



前言

在c语言的学习过程中,我们将不可避免的遇到内存函数,今天就让我们来学习一下内存函数的应用!!!


提示:以下是本篇文章正文内容,下面案例可供参考

一、内存函数是什么

内存函数是通过访问地址的方式操作对象(不必担心地址所对应的数据类型)可应用于任何类型的对象。

二、内存函数的分类(常见)

1.memcpy

void * memcpy ( void * destination, const void * source, size_t num );

  1. 函数memcpy从指针source开始往下拷贝num个字节的数据到destination所对应的空间
  2. 此函数在遇到‘\0’是不会停下,仍会自动拷贝
  3. 如果source和destination有所重叠,那么复制的结果都是未定义的
  4. memcpy函数的传参对象都是void类型,因此可以拷贝任意数据类型

memcpy的模拟实现

思路:

  1. 传递的执政不为NULL,所以用assert控制
  2. 因为不确定传递的指针个数,所以最稳妥的方法就是一个个传递,所以需要强制转化为          char*类型
  3. arr2的值会变化,所以要将其开始的值赋值给一个void*类型的变量,最后返回它
#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* arr2, const void* arr1,size_t num)
{assert(arr2 && arr1);void* p = arr2;while (num--){*(char*)arr2 = *(char*)arr1;arr2 = (char*)arr2 + 1;arr1 = (char*)arr1 + 1;}return p;
}

2.memmove

void * memmove ( void * destination , const void * source , size_t num );
  • 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

memmove的模拟实现

思路:

  1. 传递的执政不为NULL,所以用assert控制
  2. 因为不确定传递的指针个数,所以最稳妥的方法就是一个个传递,所以需要强制转化为          char*类型
  3. 分类讨论,视情况而定,要用到分支语句。
void* my_memmove(void* arr2, const void* arr1, size_t num)
{assert(arr1 && arr2);void* p = arr2;if (arr2 < arr1){while (num--){*((char*)arr2 + num) = *((char*)arr1 + num);}}else{assert(arr2 && arr1);void* p = arr2;while (num--){*(char*)arr2 = *(char*)arr1;arr2 = (char*)arr2 + 1;arr1 = (char*)arr1 + 1;}}return p;
}

3.memset

void *memset(void *ptr, int value, size_t n);

ptr:指向要填充的内存块的指针。

value:要设置的值。该值以 int 形式传递,但该函数使用此无符号 char 转换来填充内存块

size_t:字节数,无符号整型。

与strcpy的区别是:strcpy是复制,而memset是替换!!!

模拟实现:

思路:传递的执政不为NULL,所以用assert控制

因为不确定传递的指针个数,所以最稳妥的方法就是一个个传递,所以需要强制转化为          char*类型

#include<stdio.h>
#include<assert.h>void* my_memset(void* ptr, int value, size_t num)
{assert(ptr);void* p = ptr;while (num--){*((char*)ptr) = (char) value;ptr = (char*)ptr + 1;}
}

4.memcmp

int memcmp ( const void * ptr1 , const void * ptr2 , size_t num );
比较从 ptr1 和 ptr2 指针开始的 num 个字节
返回值如下:

总结

内存函数的简单介绍!!!以及memcpy,memset,memmove的区别以及模拟实现

(memcpy,memmove...)内存函数还不会??别怕,我来助你一臂之力相关推荐

  1. 《strcmp,strcpy,memcpy,memmove等函数模拟实现》

    模拟实现常见字符串函数比如:strcmp,strcpy,memcpy,memmove等函数 1.模拟实现memcpy函数 2.模拟实现memmove函数 3.模拟实现strstr函数 4.模拟实现st ...

  2. 从memcpy到memmove,内存函数拷贝与内存重叠问题(重点内容)

    有一个关于拷贝的问题,假如有这样一个字符串 char a[]="hello"; 我需要把这个字符串拷进另一个变量中 char a1[10]; 好像方法蛮多的,比如strcpy #d ...

  3. 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()

    1.memset()内存设置函数(初始化) void *my_memset(void* dest, int c, size_t count) { assert(dest != NULL); char  ...

  4. C语言程序设计 | 模拟实现内存操作函数:strncpy, strncat, strncmp, memcpy, memmove

    模拟实现字符串和内存操作函数(二)目录: strncpy strncat strncmp strcmp memcpy memmove strncpy char* strncpy(char* dst, ...

  5. c/c++内存函数(memcpy,memmove,memset,memcmp)的详解和自已实现

    1.mempy指的是C和C++使用的内存拷贝函数, 函数原型为void* memcpy(void* destin, void* source, unsigned n): 函数的功能是从源内存地址的起始 ...

  6. memcpy,memmove,memcmp,memset内存函数

    目录 memcpy内存拷贝函数 memmove函数 memcmp函数介绍 memset内存设置函数 memcpy内存拷贝函数 memcpy是内存拷贝函数,从源字符串src所指向的起始位置,拷贝到目标字 ...

  7. C语言函数:内存函数memmove()以及实现与使用。

    C语言函数:内存函数memmove()以及实现与使用. memmove(): 头文件:#include <string.h> 函数参数:          可以发现memmove()函数的 ...

  8. C语言:memcpy、memmove等函数的了解,使用以及模拟实现

    C语言:memcpy.memmove等函数的了解,使用以及实现 1.memcpy函数的介绍,使用,以及实现 2.memmove函数的介绍,使用,以及实现 1.memcpy函数的介绍,使用,以及实现 1 ...

  9. 内存函数-----Memcpy函数

    memcpy函数 头文件:<string.h> 函数功能:将从源地址source开始的num个字节复制到目标地址destination处 函数参数及返回值类型:void* memcpy(v ...

最新文章

  1. strust2自定义interceptor的基本方法及操作
  2. 【Python】编程笔记4
  3. Python实现多行数据读入
  4. Spring 三种注入方式
  5. 中国上榜前50名富豪当中,有多少人完全是通过白手起家?
  6. [转]Oracle DB管理内存
  7. 编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别都是什么运算...
  8. Numba 0.44 中文文档校对活动 | ApacheCN
  9. innodb 共享表空间 转 独立表空间 详细说明
  10. Atitit java文件监控 WatchService 的使用 目录 1. // 处理下级多层目录 1 2. // 处理新目录 1 3. Code 2 常见问题对于 1.// 处理下级多层目
  11. 终于解决了x64 win7上运行金山词霸的问题
  12. AWG标准线径规格对照表 (2
  13. 2018年 数据挖掘“泰迪杯” C题 第二问
  14. netperf测试最大连接数
  15. 上海理工大学HVAC综合实验室(图)
  16. 戴尔▪卡耐基《人性的弱点》阅读笔记(1)
  17. 微博SDK第三方授权登陆
  18. 冲刺IPO:Soul在深红市场打开的社交元宇宙
  19. Calander使用心得
  20. 动手实践,使用div盒子模型设计一个播放器效果/动手实践

热门文章

  1. 单反相机坏点和噪点测试软件,坏点和噪点测试程序(照片检测工具)
  2. wps不想让读个文档显示为多个标签页,而是打开多个窗口,方便多个文档的比对工作?
  3. 快传号视频批量上传,禁止转载!
  4. 人工智能年薪百万的工作岗位,主要有哪些?
  5. Word【内容一键生成目录】
  6. wincc7.4安装授权 全(文件分享)
  7. Word设置每章不同的页眉
  8. android列表倒计时,RecyclerView实现列表倒计时
  9. 周志华 机器学习初步 线性模型
  10. 服务化系统容量评估和性能保障