第十七章:c语言内存函数

1. memcpy使⽤和模拟实现

2. memmove使⽤

3. memset函数的使⽤

4. memcmp函数的使⽤

              天行健  君子以自强不息

一、memcpy的使用和模拟实现
在这里插入图片描述

作用:
1.
函数memcpy从source的位置向后复制num个字节的数据到destination指向的内存位置。
2.
这个函数在遇到‘\0’的时候不会停下来(该函数不检查源中是否有任何终止null字符——它总是精确地复制num个字节。)
3.如果source和destination有任何的重叠,复制的结果都是未定义的。

1.1直接使用

int main()
{int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };int len = sizeof(arr1) / sizeof(arr1[0]);int arr2[10] = { 0 };memcpy(arr2, arr1, sizeof(arr1));//这个是一个字节为单位的for (int i = 0; i < len; i++){printf("%d ", arr2[i]);}
}

1.2 模拟实现

#include<assert.h>
void* my_memcpy(void * pr2, const void* pr1, size_t count)
{void* ret = pr2;  //先把起始的地址储存起来assert(pr2 != NULL);assert(pr1 != NULL);while (count--){//因为我们这里的单位是一个字节,所以我们要一个一个的访问比较好//这里是int类型的我们可以先转化为char类型的指针来进行操作*(char *)pr2 = *(char *)pr1;pr1 = (char*)pr1 + 1;pr2 = (char*)pr2 + 1;}return ret;
}int main()
{int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };int len = sizeof(arr1) / sizeof(arr1[0]);int arr2[10] = { 0 };int  * pr =	my_memcpy(arr2, arr1, sizeof(arr1)); //这里的是int类型的 所以接收也需要int * 类型的指针for (int i = 0; i < len; i++){printf("%d ", *(pr+i));}return 0;
}

注意该函数不可以处理自己,会出现以下的错误

在这里插入图片描述

在这里插入图片描述
二、memmove使用
在这里插入图片描述
1.和memcpy 的差别就是memmove函数允许目标内存块的重叠
2.如果源空间和目标函数出现重叠,就要使用memmove函数处理

#include<stdio.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[20];int len = sizeof(arr1) / sizeof(arr1[0]);memmove(arr1+2 , arr1, 20);for (int i = 0; i < len; i++){printf("%d ", arr1[i]);}return 0;
}

三、memset函数的使用
在这里插入图片描述
memset 函数是用来设置函数的,将内存储存的值以字节为单位设置成想要的内容

#include<stdio.h>
#include<string.h>
//void* memset(void* ptr, int value, size_t num);
int main()
{char arr[10] = { "abcdefghj" };int num = sizeof(arr) / sizeof(arr[0]);//传进去的地址,设置的内容,设置字节的长度char * ret =  (char * )memset(&arr[1], 'x', 4);for (int i = 0; i < num; i++){printf("%c ", arr[i]);}return 0;
}

四、memncmp函数的使用

在这里插入图片描述

比较从ptr1和ptr2指针指向的位置开始,向后的num个字节
返回值如下:
在这里插入图片描述

int print(void)
{char arr3[20] = "abcd";char arr4[20] = "abcd";int num1 = memcmp(arr3, arr4, sizeof(arr3));return num1;}
int main()
{char arr1[20] = "i am a student";char arr2[20] = "i am a stuDent";// arr1与arr2比较,比较的个数int num = memcmp(arr1, arr2, sizeof(arr1));printf("%d\n", num);if (num > 0){printf("arr1>arr2\n");}else if (num < 0){printf("arr1<arr2\n");}else{printf("arr1=arr2\n");}int ret = print();printf("%d\n",ret);return 0;
}

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

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

相关文章

H.264编解码工具 - Intel Quick Sync Video

一、简介 Intel Quick Sync Video是英特尔的一个硬件加速技术,用于提高视频编码和解码的性能。它是英特尔处理器中集成的多媒体引擎的一部分。通过利用硬件加速,Quick Sync Video可以大幅提高视频处理性能,同时减少对CPU的负载。 Quick Sync Video支持多种编解码器,包括H…

MySQL - 进阶篇

一、存储引擎 1. MySQL体系结构 2. 存储引擎简介 3. 存储引擎特点 4. 存储引擎选择 二、索引 1. 索引概述 2. 索引结构 3. 索引分类 4. 索引语法 5. SQL性能分析 6. 索引使用 7. 索引设计原则 三、SQL优化 1. 插入数据 2. 主键优化 3. order by优化 4. group by优化 5. limi…

图像处理案例04

图像处理 问题&#xff1a;把不规则的图片按照参考图摆放 步骤&#xff1a; 1. 用ORB找关键点 2. 关键点匹配 3. 根据上一步匹配的关键点得出单应性矩阵 4. 根据单应性矩阵对不规则进行透视变换 import cv2 import numpy as np import matplotlib.pyplot as pltimgl cv2.imrea…

Hive数仓操作(五)

一、Hive 信息查看 Hive的元数据管理&#xff1a; Hive 将表的元数据&#xff08;如表名、列名、类型等&#xff09;存储在关系型数据库中&#xff0c;通常是 MySQL。元数据的主要表包括&#xff1a; TBLS&#xff1a;存储表的信息&#xff08;表名、类型、ID 等&#xff09;。…

【小程序】微信小程序课程 -4 项目实战

目录 1、 效果图 2、创建项目 2.1 创建小程序端 2.1.1 先创建纯净项目 2.1.2 删除components 2.1.4 删除app.json红色部分 2.1.5 删除index.json红色部分 2.1.6 删除index.wxss全部内容 2.1.7 删除index.wxml全部内容 2.1.8 app.json创建4个页面 2.1.9 app.json添加…

Python 枚举类型详解

Python 枚举类型详解 什么是枚举类型&#xff1f;枚举类型用法定义枚举类型访问枚举成员枚举的比较枚举迭代 枚举的特殊用法自动赋值枚举中的别名 枚举应用场景状态机配置选项标志操作 什么是枚举类型&#xff1f; 枚举&#xff08;Enumeration&#xff09;是一种数据类型&…

15年408计算机网络

第一题&#xff1a; 解析&#xff1a; 接收方使用POP3向邮件服务器读取邮件&#xff0c;使用的TCP连接&#xff0c;TCP向上层提供的是面向连接的&#xff0c;可靠的数据传输服务。 第二题&#xff1a; 解析&#xff1a;物理层-不归零编码和曼彻斯特编码 编码1&#xff1a;电平在…

GAMES101(作业8)

作业8 题目&#xff1a; 模拟绳子动画&#xff0c;包括基于物理的&#xff0c;和非物理的&#xff0c;应该修改的函数是:rope.cpp 中的void Rope::simulateEuler(... Rope::rope(...)&#xff0c;&#xff0c;void Rope::simulateVerlet(...) 代码框架&#xff1a; main:负…

centos磁盘逻辑卷LVM创建

centos磁盘逻辑卷LVM创建 一、磁盘逻辑卷LVM说明二、centos磁盘使用情况三、LVM安装指南1.LVM工具安装1. yum list lvm2. yum search lvm3. yum search pvcreate4. yum list lvm25. yum install lvm2 2.创建物理卷2.1磁盘情况查看2.2创建物理卷&#xff08;PV&#xff09; 3.创…

使用Postman工具接口测试

文章目录 一、接口1.1 接口的概念1.2 接口的类型 二、接口测试2.1 概念2.2 原理2.3 特点 三、HTTP协议3.1 http协议简介3.2 URL格式3.3 HTTP请求3.3.1 请求行3.3.2 请求头3.3.3 请求体 3.4 HTTP响应3.4.1 状态行3.4.2 响应头3.4.3 响应体 3.4 传统风格接口3.5 RESTful风格接口 …

Race Karts Pack 全管线 卡丁车赛车模型素材

是8辆高细节、可定制的赛车,内部有纹理。经过优化,可在手机游戏中使用。Unity车辆系统已实施-准备驾驶。 此套装包含8种不同的车辆,每种车辆有8-10种颜色变化,总共有75种车辆变化! 技术细节: -每辆卡丁车模型使用4种材料(车身、玻璃、车轮和BrakeFlare) 纹理大小: -车…

基于单片机的可调式中文电子日历系统

** 文章目录 前言概要功能设计软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

RSRP SNR SINR

RSRP&#xff08;Reference Signal Received Power&#xff0c;参考信号接收功率&#xff09;是衡量LTE网络中无线信号强度的关键参数之一&#xff0c;它表示在某个符号内承载参考信号的所有资源元素&#xff08;RE&#xff09;上接收到的信号功率的平均值。RSRP的数值通常在-4…

如何在O2OA中使用ElementUI组件进行审批流程工作表单设计

本文主要介绍如何在O2OA中进行审批流程表单或者工作流表单设计&#xff0c;O2OA主要采用拖拽可视化开发的方式完成流程表单的设计和配置&#xff0c;不需要过多的代码编写&#xff0c;业务人员可以直接进行修改操作。 在流程表单设计界面&#xff0c;可以在左边的工具栏找到Ele…

CSS预处理器LESS

LESS是一种CSS预处理器&#xff0c;它扩展了CSS的功能&#xff0c;通过引入变量、嵌套规则、Mixins&#xff08;混合&#xff09;、函数等特性&#xff0c;使得CSS的编写更加灵活和高效。以下是LESS的一些常用方式&#xff1a; 1. 变量 LESS允许定义变量&#xff0c;并在整个…

文心一言 VS 讯飞星火 VS chatgpt (357)-- 算法导论24.2 3题

三、上面描述的 PERT 图的公式有一点不太自然。在一个更自然的结构下&#xff0c;图中的结点代表要执行的工作&#xff0c;边代表工作之间的次序限制&#xff0c;即边 (u&#xff0c;v) 表示工作 u 必须在工作 v 之前执行。在这种结构的图中&#xff0c;我们将权重赋给结点&…

InnoDB 和 MyIsam 引擎的区别?数据库存储引擎的选择与解析:InnoDB 与 MyISAM 的全面对比

在当前的数字化时代&#xff0c;数据库不仅是保存信息的地方&#xff0c;更是业务运营的核心。MySQL 作为全球最流行的开源数据库之一&#xff0c;其灵活性和强大功能使得开发者和企业在选择存储引擎时需慎重考虑。本文将详细探讨 MySQL 中的两个主要存储引擎——InnoDB 和 MyI…

Spring面向对象的设计模式

在Spring框架中&#xff0c;面向对象的设计模式被广泛使用&#xff0c;这些设计模式能够提高代码的可维护性、可扩展性和复用性。以下是一些在Spring中常用的设计模式&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&#xff09; 定义&#xff1a;保证一个类仅有一个…

httpsok-v1.17.0-SSL通配符证书自动续签

&#x1f525;httpsok-v1.17.0-SSL通配符证书自动续签 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具&#xff0c;基于全新的设计理念&#xff0c;专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业&#xff0c;稳定、安全、可靠。 一行命令&#xff0c;一分钟轻…

LQR算法核心思想

本章以倒立摆为解决目的 什么是线性二次型控制器&#xff08;LQR&#xff09; 开环系统 即状态变量的倒数 系统的状态空间矩阵A * 系统状态变量x A状态矩阵&#xff1a;描述系统本身物理特性的一个矩阵&#xff0c;它是由系统本身的机械结构、物理结构决定的&#xff0c;无法…