内存函数(C语言进阶)

目录

前言

1、memcpy

2、memmove

3、memcmp

4、memset      

结语


前言

        本篇介绍了C语言中的内存函数,内存函数,顾名思义就是处理内存的函数。

1、memcpy

        memcpy:内存拷贝函数。

        相对于strcpy只能拷贝字符串来讲,memcpy能拷贝其他类型的数据。

        举例子:

#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7 };int arr2[20] = { 0 };memcpy(arr2, arr1, 28);int i = 0;for (i = 0;i < 20;i++){printf("%d\n", arr2[i]);}return 0;
}

效果:

        memcpy用法讲解:

        它包括三个参数,第一个参数为要拷贝到的目标地址,第二个参数为被拷贝的内容地址,第三个为拷贝的字节大小。如上面这个例子,我们要将arr1拷贝到arr2中,前两个参数就是他们的首地址,第三个参数是根据整型数据一个大小为4,arr1中有7个整型,所以计算得拷贝得数据大小为28。这样就可以达到我们想要的效果。

        注意一个特殊情况,memcpy不用于处理重叠的内存之间的数据拷贝,如:将一个数组arr[]={1,2,3,4,5,6,7,8}; 它的前4个元素拷贝到它的第3到7个元素的位置,这时就会出错,因为当我要将第3个数拷贝到第6个位置是,其实第三个数在前面已经被第一个数覆盖了。但是在vs编译器中memcpy是可以实现重复内存操作的,实际上memcpy是没有这样的功能要求的,是vs自己改进了。

        如果需要在重叠内存间进行数据拷贝,实际要用到函数:memmove

2、memmove

        memmove函数从参数上和功能上都和memcpy是一样的,但是它可以对有重叠内存的数据之间进行拷贝。

#include <stdio.h>
#include <string.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8 };memmove(arr + 2, arr, 16);int i = 0;for (i = 0;i < 8;i++){printf("%d", arr[i]);}return 0;
}

        实现了这样一个内存重叠的操作。

3、memcmp

        我们可以参照函数strcmp,memcmp函数就是在strcmp的基础上,扩大了它所作用的数据类型,它可以对内存中任意的两个数据进行比较。那它是怎么用的呢,我们来看一个例子:

#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,3,4,5 };int arr2[] = { 1,3,2 };int ret = memcmp(arr1, arr2, 12);printf("%d\n", ret);return 0;
}

看看输出:

        先来讲讲memcmp的三个参数,它的前两个参数放的是需要比较的两组数据的其实地址,第三个参数放的是比较数据的大小(字节)。上面这个例子,我们将两个数组的名字(首地址)作为前两个参数(比较对象),最后输入了一个12,代表我们要比较12个字节的数据,也就是3个整型的数据,输出结果来看,它输出了-1,意思是arr1没有arr2大。这是因为我们只限制了比较前三个整型数据,因此arr2和arr1第一个元素相同,第二个元素arr2大于arr1,尽管后面arr1第三个数据大于arr2,但是这个函数是从前往后比的,所以只看第一个出现不同的位置之间的数据大小,后面就不管了,所以整体arr2大于arr1,所以输出-1。

        对于memcpy的输出,如果被比较的两个数据前者大于后者,返回1;前者等于后者,返回0;前者小于后者,返回-1。

4、memset      


         memset:内存设置函数,用于设置内存。

        先看一个例子:

#include<stdio.h>
int main()
{char arr[] = "hello world";memset(arr, 'x', 5);printf("%s\n", arr);return 0;
}

效果:

        先看memset的三个参数,第一个参数是被设置的内存地址,第二个参数是要设置的内容,第三个参数是需要设置的大小。

        例如上面这个例子,我们想要将arr这个字符串的前五个字符设置成x,我们就可以如上这样子使用,最后达成我们预期的效果。

        memset函数常用来初始化。注意,对于整型数据来讲,如果用memset来初始话,就只能用来初始化0,不能初始化1,因为memset是以一个字节为单位进行初始化的,如果初始化1,则对于整型数据来说,初始化的其实是01 01 01 01。

结语

        对于内存函数,就讲到这了,如果对你有所帮助,我会很开心。

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

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

相关文章

Qt介绍以及qt_creater的安装和C++项目工程创建

最近天气严寒&#xff0c;同学们要注意保暖哦&#xff01;学习的同时别忘了照顾好自己呀&#xff01;o(*&#xffe3;▽&#xffe3;*)ブ 目录 一、Qt 1、Qt概念 2、常见的GUI 二、安装qt_creater 方法一&#xff1a; 方法二&#xff1a; 三、Qt_creater 中C项目的创建 …

MATLAB环境下一种改进的瞬时频率(IF)估计方法

相对于频率成分单一、周期性强的平稳信号来说&#xff0c;具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种&#xff0c;由于其频率时变、距离分辨率高、截获率低等特性&#xff0c;被广泛应用于雷达、地震勘测等领域。调频信…

华为大数据平台-FusionInsight MRS

1、产品定位 (1) 关于华为的大数据平台&#xff0c;本人之前用过FusionInsight HD版本&#xff0c;近期也在用MRS结合MPP和治理平台做湖仓一体的开发&#xff0c;其实MRS是在HD基础上进行的升级、改版&#xff0c;MRS是集成一些开源的大数据组件&#xff0c;有自己的运维和安全…

LabVIEW光伏逆变器低电压穿越能力测试

LabVIEW光伏逆变器低电压穿越能力测试 随着光伏发电技术的迅速发展&#xff0c;光伏逆变器的低电压穿越&#xff08;LVRT&#xff09;能力日益成为影响电网稳定性的关键因素。为了提升光伏逆变器的并网性能&#xff0c;开发了一套基于LabVIEW的光伏逆变器LVRT测试系统。该系统…

05-验证整数输入

需求分析 我们在脚本中验证整数输入可谓是小菜一碟&#xff0c;但如果你也想接受负数的话&#xff0c;可就没那么容易了。问题在于每个数值只能有一个负号&#xff0c;而且还必须出现在数值的最开始部分。下面脚本可以确保正确地格式化负数&#xff0c;另外还能检查其值是否位…

JAVA工程师面试专题-《并发编程篇》

目录 一、线程 1、并发与并行的区别 2、同步和异步的区别 3、Java中创建线程有哪些方式? 4、Thread和Runnable的区别 5、Java中的Runnable、Callable、Future、FutureTask的区别和联系&#xff1f; 6、说一下你对 CompletableFuture 的理解 7、volatile关键字有什么用&…

Ansible script 模块 该模块用于将本机的脚本在被管理端的机器上运行。Ansible服务执行本机脚本

目录 过程首先&#xff0c;我们写一个脚本&#xff0c;并给其加上执行权限直接运行命令来实现在被管理端执行该脚本验证错误演示 过程 该模块直接指定脚本的路径即可 首先&#xff0c;我们写一个脚本&#xff0c;并给其加上执行权限 vim /tmp/df.sh编辑脚本内容 这个脚本内容…

信钰证券:无任何氢能产品形成收入,这只氢能概念股却八连板了

受氢能方针面影响&#xff0c;多个氢能股迎来连涨潮。 2月26日&#xff0c;蓝科高新(601798.SH)涨停&#xff0c;截至收盘报11.01元&#xff0c;涨幅9.99%&#xff0c;完成八连板&#xff0c;总市值39.03亿元。首要因其地点氢能板块全体上涨影响。 同日同花顺氢动力概念下&am…

【底层解读】ArrayList源码学习

成员变量 学习源码前&#xff0c;我们还是先看一下ArrayList中成员变量有哪些 构造函数 ArrayList一共有三个构造函数。 第一个&#xff1a;带有指定初始容量的构造函数 第二个&#xff1a;空参构造 第三个&#xff1a;包含指定集合的构造函数 OK&#xff0c;看完构造函数&a…

120KW OBC充电机定期检测的必要性

随着电动汽车的普及&#xff0c;充电设备的需求也在不断增加&#xff0c;其中&#xff0c;120KW OBC&#xff08;On-Board Charger&#xff09;充电机作为电动汽车的重要充电设备&#xff0c;其性能和安全性直接关系到电动汽车的使用体验和安全。因此&#xff0c;对120KW OBC充…

Python日志记录库——loguru

文章目录 一. 概述二、基本使用2.1 安装2.2 日志输出 三、进阶用法3.1 显示格式3.2 写入文件3.3 模块名参数化3.4 日志留存、压缩与清理3.5 序列化为json格式3.6 并发安全 参考资料 一. 概述 在 Python 中用到日志记录&#xff0c;那就不可避免地会用到内置的 logging标准库 。…

Spring全面精简总结

Spring两大核心功能&#xff1a;IOC控制反转、AOP面向切面的编程 控制反转(loC&#xff0c;Inversion of Control)&#xff0c;是一个概念&#xff0c;是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器&#xff0c;通过容器来实现对象的装配和管理。控制反转就是…

雷达一维成像:基于数据集的实践

雷达一维成像&#xff1a;基于数据集的实践 (距离压缩\距离-时间图\距离-多普勒图\微多普勒图) 说明 雷达成像技术是雷达发展的一个重要里程碑&#xff1a;从此雷达的功能不仅仅是将所观测的对象视为点目标&#xff0c;并只测量它的位置与运动参数。雷达成像技术使得我们可以获…

【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

雾锁王国服务器配置怎么选择?阿里云和腾讯云

雾锁王国/Enshrouded服务器CPU内存配置如何选择&#xff1f;阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置&#xff0c;支持4人玩家畅玩&#xff0c;自带10M公网带宽&#xff0c;1个月90元&#xff0c;3个月271元&#xff0c;幻兽帕鲁服务器申请页面 https://t.aliyun.com…

电商数据api接口大全,商品API,店铺API,订单API,获取请求key详细接入案例

电商数据API接口大全包括商品API、店铺API和订单API等&#xff0c;以下是一些常见的API接口以及获取请求key的详细接入案例&#xff1a; 获取请求key的详细接入案例&#xff1a; 以淘宝商品API为例&#xff0c;获取请求key的步骤如下&#xff1a; 注册成为开放平台的开发者&a…

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

最终效果 简介 GB28181协议是视频监控领域的国家标准。该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求, 以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。GB28181协议信令层面使用的是SIP(Session Initiatio…

k8s节点负载使用情况分析命令kubectl describe node [node-name]

1.到任意安装了kubectl节点命令的节点上执行kubectl describe node [node-name] 上面的Requests最小分配 Limits最大分配是所有pod之和&#xff0c;最小分配之和不能超过服务器实际参数&#xff0c;否则新的pod会因为资源不够起不来&#xff0c;最大分配是预设之和&#xff0…

程序员眼中的“祖传代码”:魔法书中的智慧和技巧

目录 前言1 祖传代码的传承与传统2 家传宝贝&#xff1a;珍贵的遗产3 祖传秘方&#xff1a;独特的问题解决奥秘4 祖传代码中的故事&#xff1a;技术的发展轨迹结语 前言 在编程的奇妙世界中&#xff0c;存在着一种特殊的代码&#xff0c;被程序员们亲切地称之为“祖传代码”。…

Spring6学习技术|事务

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; 事务 什么是事务&#xff1f;好像是数据库部分的词&#xff0c;我自己的理解是对数据库进行的操作序列&#xff0c;要么一起完成&#xff0c;要么都不完成…