C语言学习(二十九)---内存操作函数

news2024/11/16 3:19:30

在上一节内容中,我们学习了有关字符串操作的函数,其中分为了限制长度和不限制长度两种方式,虽然上节内容已经在很大程度上有助于程序的实现,但是其有一个致命的缺陷,聪明的你一定已经猜到了吧,对的,它只能应用于字符串,如果我想要对其他类型数据进行操作就失效了,因此有必要学习内存操作函数,好了,话不多说,开整!!!

memcpy

查看该函数的使用说明:
在这里插入图片描述
可见其传递的参数为void*,也就是空指针,没有限定指针类型,所以可以对任何类型的数据都可以进行拷贝,使用方式如下:

memcpy(目的地,源地址,多少字节)

如下所示的代码:

#include<stdio.h>
#include<string.h>
int main()
{
    int sou[] = {1,2,3,4,56};
    int des1[10]  = {0};
    int des2[10] = {0};
    strcpy(des1,sou);
    memcpy(des2,sou,sizeof(sou));
    memcpy(des3,sou,8);
    return 0;
}

我们F5进入调试模式,先看上节所学习的strcpy能否完成我们的要求呢:
在这里插入图片描述
可见strcpy只将1复制过来了,我们再看内存操作函数memcpy
在这里插入图片描述
可见,将源地址中的所有数据都复制过来了,下面我们查看只复制8个字节也就是两个整型des3的结果:
在这里插入图片描述
当然了,你也可以尝试其他类型的数据的拷贝操作,在此处就不一一演示了。

memmove

上述的拷贝都是从不相同源地址向目的地地址进行拷贝操作的,那么如果源地址与目的地地址所操作的变量为同一内容的情况下,使用该函数,可不可以得到不想要的效果呢,代码如下:

我们上代码进行验证,代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
    int arr[] = {1,2,3,4,5,6};
    memcpy(arr+2,arr,12);
    return 0;
}

同样进行调试模式查看结果:
在这里插入图片描述
我去,还真可以,确实是这样,但是实际上在C语言标准中:

memcpy只需能拷贝不重叠的内存就行了
memmove用来拷贝重叠的内存

也就是memcpy太卷了不需要你做的你也给我做了,难受。。。
当然了,一个专门处理重叠内存的操作函数,名为memmove,其使用方式如下:
在这里插入图片描述
也就是:

memmove(目的地,源地址,移动多少字节的数据)

那么我们将上述代码中的memcpy函数换为memmove函数,查看结果:
在这里插入图片描述
可以看到也可以实现这个功能,用两幅图来理解这个两个函数也就是:
memcpy
在这里插入图片描述
不卷的情况下,上述的两幅图分别对应memcpymemmove两个函数。

memcmp

在前一节内容中,我们学习了字符串之间比较的函数strcmpmemcmp不仅可以比较字符串,也可以比较其他各种类型的变量,其使用方法如下

在这里插入图片描述
可见,其使用方法如下:

memcmp(目的地地址,源地址,比较多少字节)

返回值同字符串比较函数strcmp,如下所示:
在这里插入图片描述
比较方式也相同按顺序进行比较,例如以下代码:

#include<stdio.h>
#include<string.h>
int main()
{
    int arr1[] = {1,2,3,4,56};
    int arr2[] = {1,2,1,4,56};
    int arr3[] = {1,2,0,4,56};
    int res1 = memcmp(arr1,arr1+2,4);
    int res2 = memcmp(arr2,arr2+2,4);
    int res3 = memcmp(arr3,arr3+2,4);
    printf("%d %d %d\n",res1,res2,res3);
    return 0;
}

分析如下:

res1:1<3 输出小于0的数;
res2:1=3 输出等于0;
res3:1>0 输出小于0的数

编译查看结果:
在这里插入图片描述
确实和我们分析的一致。

memset

该函数是一个设置内存内容的函数,查看其使用方式:
在这里插入图片描述
也即:

memset(要设置哪的位置的地址,设置的内容,设置多少字节)

如以下代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[] = "********";
    memset(arr,'#',4);
    int i = 0;
    for(i=0;i<8;i++)
    {
        printf("%c ",arr[i]);
    }
    return 0;
}

按照上述的理论,分析如下:
从字符数组arr的首地址开始的4个字节内容设置为#,我们编译一下,查看结果:
在这里插入图片描述
可见,确实和我们分析的一致。

上述内容即使今天的全部内容了,感谢大家的观看。
如果方便,辛苦大家点个赞和关注哦!
您的点赞或评论或关注是对我最大的肯定,谢谢大家!!!

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

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

相关文章

Linux 网络通信C/S、TCP/IP、Socket 最全详解( 9 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

【算法题】动态规划中级阶段之不同的二叉搜索树、交错字符串

动态规划中级阶段 前言一、不同的二叉搜索树1.1、思路1.2、代码实现 二、不同的二叉搜索树 II2.1、思路2.2、代码实现 三、交错字符串3.1、思路3.2、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优…

Pycharm中成功配置PyQt5(External Tools),设计好界面直接生成python代码

1、安装PyQt5和PyQt5-tools 在Pycharm中设置好Python环境&#xff0c;点击File-Settings-Project-Python Interpreter 设置好后退出&#xff0c;点击窗口下的Terminal&#xff0c;输入 # 直接安装输入pip install pyqt5&#xff0c;如果太慢可以用国内镜像源&#xff0c;若出…

【C++实现二叉树的遍历】

目录 一、二叉树的结构二、二叉树的遍历方式三、源码 一、二叉树的结构 二、二叉树的遍历方式 先序遍历&#xff1a; 根–>左–>右中序遍历&#xff1a; 左–>根–>右后序遍历&#xff1a;左–>右–>根层次遍历&#xff1a;顶层–>底层 三、源码 注&am…

SpringBoot04:JSR303数据校验及多环境切换

目录 一、JSR303数据校验 1、如何使用&#xff1f; 2、常见参数 二、多环境切换 1、多配置文件 2、yaml的多文档块 3、配置文件加载位置 一、JSR303数据校验 1、如何使用&#xff1f; SpringBoot中可以用Validated来校验数据&#xff0c;如果数据异常则会统一抛出异常…

python篇---统计列表中每个数字的出现次数

python篇—统计列表中每个数字的出现次数 # -*- coding: utf-8 -*- from collections import Counterlst [1, 2, 3, 3, 4, 1, 2, 5, 5, 5] count Counter(lst) print(每个数字在列表中的出现次数&#xff1a;, count) # 再将collections.Counter格式转换成dict print(dict(c…

C# 难点语法讲解之虚方法(virtual)和隐藏方法的区别---从应用需求开始讲解

这里不单独讲虚方法和隐藏方法是什么&#xff0c;很多文章都有讲&#xff0c;这里只讲他们的区别和应用理解。 另外&#xff1a;如果你不懂MonoBehaviour就别管他&#xff0c; Debug.Log就是Console.WriteLine <一>、隐藏方法 一、隐藏方法的背景故事 从前有个了不起…

C++ | 多线程资源抢占bug解决

多线程资源抢占bug解决 文章目录 多线程资源抢占bug解决bug说明原因排查解决经验>>>>> 欢迎关注公众号【三戒纪元】 <<<<< bug说明 最近调试程序&#xff0c;程序在Release版本下可运行&#xff0c;一直没有问题&#xff0c;在Debug模式下编译后…

Leetcode42 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xf…

【javascript】防止内容被复制

在JavaScript中&#xff0c;我们可以使用onselectstart事件来防止页面内容被选取。此时无法选取所要的内容。 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><script>window.onload function() {document.bod…

计算机网络————网络层

文章目录 网络层设计思路IP地址IP地址分类IP地址与硬件地址 协议ARP和RARPIP划分子网和构造超网划分子网构造超网&#xff08;无分类编址CIDR&#xff09; ICMP 虚拟专用网VPN和网络地址转换NATVPNNAT 网络层设计思路 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数…

mysql表中出现特殊符号(逗号,点号),如何进行查询或操作

mysql表中出现特殊符号&#xff08;逗号&#xff0c;点号&#xff09;&#xff0c;如何进行查询或操作 一、背景说明二、需要把表"引"起来&#xff0c;tab键上面的那个按钮&#xff0c;不是引号 一、背景说明 当mysql表名中出现如点号&#xff08;.&#xff09;&…

安装并使用docker

1、安装docker 1.1、更新现有的包列表&#xff1a; sudo apt update 1.2、用apt安装一些允许通过HTTPS才能使用的软件包&#xff1a; sudo apt install apt-transport-https ca-certificates curl software-properties-common 1.3、将官方Docker存储库的GPG密钥添加到您的系统…

二.Elasticsearch进阶

建议从这里开始看&#xff1a;Elasticsearch快速入门及使用 Elasticsearch进阶 一.Elasticsearch检索方式1.uri 检索参数(不常用)2.uri 请求体(常用&#xff0c;也叫Query DSL) 二.Query DSL语法举例1.match全文匹配2.match_phrase短语匹配3.multi_match多字段匹配4.bool复合…

在Gradio中创建交互式代码编辑器:介绍Code模块和其功能

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Matlab评价模型--灰色关联度分析

评价模型–灰色关联度分析 灰色关联度分析 基本思想 灰色关联分析的基本思想 是根据序列曲线几何形状的相似程度来判断其联系是否紧密&#xff0c;曲线越接近&#xff0c;相应序列之间的关联度就越大&#xff0c;反之则越小。 此方法可用于 进行系统分析&#xff0c;也可应用…

uniapp顶部导航栏被遮住显示问题

解决uniapp顶部导航栏被遮住显示问题 uniapp官方给了处理的方案&#xff0c;即css变量&#xff0c;–status-bar-height&#xff0c;小程序这个值是25px&#xff0c;app则根据实际情况去变化 如下&#xff1a; //头部导航栏 <view class"header"> </view…

【算法题】动态规划中级阶段之最长回文子串、括号生成、跳跃游戏

动态规划中级阶段 前言一、最长回文子串1.1、思路1.2、代码实现 二、括号生成2.1、思路2.2、代码实现 三、跳跃游戏 II3.2、思路3.2、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优化问题的方法。…

加速你的容器管理!轻松安装kubeadm、kebelet和kubectl!

1 kubernetes镜像切换成国内源 访问 阿里云镜像&#xff1a; M1M2芯片的arm64架构需要更改&#xff1a; cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_6…

Nginx【概述、应用场景、环境准备、下载与安装、目录详解、】(一)-全面详解(学习总结---从入门到深化)

目录 Nginx概述 Nginx 四大应用场景 为什么用Nginx 环境准备 Nginx下载与安装 Nginx目录详解 Nginx概述 Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。Ngi…