C语言进阶版第14课—内存函数

文章目录

  • 1. memcpy函数的使用和模拟实现
    • 1.1 memcpy函数的使用
    • 1.2 模拟实现memcpy函数
  • 2. memmove函数的使用和模拟实现
    • 2.1 memmove函数的使用
    • 2.2 memmove函数的模拟实现
  • 3. memset函数
  • 4. memcmp函数

1. memcpy函数的使用和模拟实现

1.1 memcpy函数的使用

  • memcpy函数的原形
  • void* memcpy ( void* destination, const void* source,size_t num );
  • strcpy函数是用来复制字符串的,而memcpy函数是用来复制任何数据的

memcpy


  • 当然我们也可以随意复制source里面的数据

在这里插入图片描述


  • memcpy函数复制结构体数据

在这里插入图片描述


1.2 模拟实现memcpy函数

  • 由于memcpy函数是一个字节一个字节进行拷贝的,因此需要无符号指针类型接收数据

在这里插入图片描述


  • my_memcpy函数中,如果source和destination有任何重叠,结果就可能出错
  • 假如现在创建一个整型数组 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  • 如果想把5个元素(1,2,3,4,5)放到(3,4,5,6,7)里面去,my_memcpy能帮我们实现吗?

在这里插入图片描述


  • 那么memcpy函数能不能帮助我们实现呢?

在这里插入图片描述
  通常我们使用memcpy函数来处理源空间和目标空间无重叠的情况,而重叠的情况通常使用memmove函数来实现

2. memmove函数的使用和模拟实现

2.1 memmove函数的使用

  • memmove函数的原形是
  • void * memmove ( void * destination, const void * source, size_t num );
  • 与memcpy函数的参数一致,也是将源空间的内容按照num个字节的方式复制到目标空间里
  • memmove函数就是用来处理源空间和目标空间有重叠的情况的,用来拷贝内存块

在这里插入图片描述


2.2 memmove函数的模拟实现

  • 给定一个整型数组arr,里面放10个元素
  • int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  • 如何将1,2,3,4,5放入3,4,5,6,7里呢?

在这里插入图片描述


  • 源空间地址sour < 目标空间地址dest时

在这里插入图片描述


  • 源空间地址sour > 目标空间地址dest时

在这里插入图片描述


在这里插入图片描述

  • ( char*)dest + 19个字节就指向了第20个字节,此时刚好num = 19,sour也一样

//memmove函数的模拟实现
#include <stdio.h>
#include <string.h>
void* my_memmove(void* dest, const void* sour, size_t num)
{//从后向前if (sour < dest){while (num--){*((char*)dest + num) = *((char*)sour + num);}}//从前向后else{while (num--){*(char*)dest = *(char*)sour;dest = (char*)dest + 1;sour = (char*)sour + 1;}}
}
int main()
{int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr[10] = { 0 };memcpy(arr, arr1, 10 * sizeof(int));my_memmove(arr1 + 2, arr1, 5 * sizeof(int));my_memmove(arr2, arr2 + 2, 5 * sizeof(int));for (int j = 0; j < 10; j++){printf("%d ", arr[j]);}printf("\n");for (int i = 0; i < 10; i++){printf("%d ", arr1[i]);}printf("\n----------------------\n");for (int j = 0; j < 10; j++){printf("%d ", arr[j]);}printf("\n");for (int i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}

3. memset函数

  • **void * memset ( void * ptr, int value, size_t num );
  • memset函数是用来设置内存的,将内存中的值以字节为单位设置成想要的内容,不过一般都设置为0

在这里插入图片描述

4. memcmp函数

  • int memcmp ( const void* ptr1, const void* ptr2, size_t num );
  • memcmp函数是用来比较内存空间里的内容的,返回一个整数
  • ptr1和ptr2指向了要比较的内存空间

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语音标与重弱读

英语中&#xff0c;比较重要的是音标。但事实上&#xff0c;我们对音标的学习还是比较少的&#xff0c;对它的理解也是比较少的。 一、音标 2个半元音 [w][j] 5个长元音&#xff1a;[i:] [ə:] [ɔ:] [u:] [ɑ:] 7个短元音&#xff1a;[i] [ə] [ɔ] [u] [] [e] [ʌ] 8个双元音…

第100+26步 ChatGPT学习:概率校准 Bayesian Binning into Quantiles

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

【2】图像视频的加载和显示

文章目录 【2】图像视频的加载和显示一、代码在哪写二、创建和显示窗口&#xff08;一&#xff09;导入OpenCV的包cv2&#xff08;二&#xff09;创建窗口&#xff08;三&#xff09;更改窗口大小 & 显示窗口&#xff08;四&#xff09;等待用户输入补充&#xff1a;ord()函…

【Unity踩坑】Unity更新Google Play结算库

一、问题描述&#xff1a; 在Google Play上提交了app bundle后&#xff0c;提示如下错误。 我使用的是Unity 2022.01.20f1&#xff0c;看来用的Play结算库版本是4.0 查了一下文档&#xff0c;Google Play结算库的维护周期是两年。现在需要更新到至少6.0。 二、更新过程 1. 下…

【视频目标分割-2024CVPR】Putting the Object Back into Video Object Segmentation

Cutie 系列文章目录1 摘要2 引言2.1背景和难点2.2 解决方案2.3 成果 3 相关方法3.1 基于记忆的VOS3.2对象级推理3.3 自动视频分割 4 工作方法4.1 overview4.2 对象变换器4.2.1 overview4.2.2 Foreground-Background Masked Attention4.2.3 Positional Embeddings 4.3 Object Me…

cpp,git,unity学习

c#中的? 1. 空值类型&#xff08;Nullable Types&#xff09; ? 可以用于值类型&#xff08;例如 int、bool 等&#xff09;&#xff0c;使它们可以接受 null。通常&#xff0c;值类型不能为 null&#xff0c;但是通过 ? 可以表示它们是可空的。 int? number null; // …

使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南

使用 SSH 连接 Docker 服务器&#xff1a;IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下&#xff0c;通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问&#xff0c;用户可以安全地远程操作…

NASA数据集:ATLAS/ICESat-2 L3B 每日和每月网格化海冰自由面高度,第 4 版

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Sea Ice Freeboard, Version 4 简介 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Sea Ice Freeboard, Version 4数据是由NASA的ATLAS&#xff08…

Ubuntu 系统崩了,如何把数据拷下来

问题描述&#xff1a; Linux系统中安装输入法后&#xff0c;重启后&#xff0c;导致系统无法进入&#xff0c;进入 recovery mode下的resume 也启动不了&#xff0c;所以决定将需要的东西复制到U盘 解决方案&#xff1a; 1.重启ubuntu&#xff0c;随即点按Esc进入grub菜单&am…

OpenStack Yoga版安装笔记(十五)Horizon安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能

关键词&#xff1a;audio、音频录制、音频播放、权限申请、文件管理 在app的开发过程中时常会遇见一些需要播放一段音频或进行语音录制的场景&#xff0c;那么本期将介绍如何利用鸿蒙 audio 模块实现音频写入和播放的功能。本次依赖的是 ohos.multimedia.audio 音频管理模块&am…

AI日常绘画【国庆海报】:盛世迎华诞,Flux国庆节海报制作教程

大家好我是极可菌&#xff01;&#xff01;&#xff01; 马上就要到祖国母亲的节日了&#xff0c;想想心里都美滋滋的&#xff0c;终于可以放松一下了。相信AI绘画关于国庆主题肯定也会精彩纷呈吧&#xff0c;今天和大家分享几组关于国庆海报的制作教程。 本文使用基于Flux的相…

windows 驱动实例分析系列-定时日志的COM驱动

本文章的前置文章为: windows 驱动编写原则 windows COM驱动 案例 windows COM驱动的I/O处理 在前面的设计中,主要是对windows提供的VirtualSerial源代码的讲解,但是那个驱动其实是一个空壳驱动,用于学习的,在I/O处理中,也讲述了serial I/O处理的本质,接下来会将这些…

【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…

如何使用SCCMSecrets识别SCCM策略中潜在的安全问题

关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具&#xff0c;该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行&#xff0c;并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外&#xff0c;它还将…

【C++篇】启航——初识C++(下篇)

接上篇【C篇】启航——初识C&#xff08;上篇&#xff09; 目录 一、引用 1.引用的概念 2.引用的基本语法 3.引用的特点 3.1 别名 3.2 不占用额外内存 3.3 必须初始化 3.4 不能为 NULL 4.引用的使用 4.1 函数参数传递 4.2 返回值 4.3 常量引用 5.引用和指针的关…

网站建设公司如何选?2024专业网站建设公司哪家好TOP3

要找一家靠谱的网站建设公司&#xff0c;可以根据以下五点判断&#xff1a; 1.企业的工商信息 企业有多少人、什么时候成立的、成立资金是多少、是否有违约记录这些都可以在查企业的那种app里可以看到&#xff0c;去查的时候一定要仔细甄别&#xff0c;别最后找了一家皮包公司…

PCL 索引空间采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 索引空间采样 2.1.2 可视化原始点云和下采样后的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xf…

软件设计师——计算机网络

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;软考——软件设计师&#x1f3c5;往期回顾&#x1f3c6;&#xff1a;&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱 一、OSI/ RM七层模型(⭐⭐⭐) ​ 层次 名称 主要功…

【Iceberg分析】调研Iceberg中表的原地演变

调研Iceberg中表的原地演变 文章目录 调研Iceberg中表的原地演变原生非分区表文件关系图表的原地演变之表schema演变新增字段new_column文件关系变化图为新增字段写入数据文件关系变化图删除新增字段文件关系变化图新增字段new_column2文件关系变化图删除数据文件关系变化图 原…