C语言内存操作函数详解

作者:wwhdsg 时间:2021-09-01 01:50:36 

头文件:#include<memory.h>

1.memcpy

作用:内存拷贝

函数原型:


void *memcpy( void *dest, const void *src, size_t count );

使用:

使用格式:memcpy(目的地,原,想操作内存大小(单位字节))

C语言内存操作函数详解

把 "参数2" 起始的 "参数3" 个字节 内容拷贝到 "参数1 '

memecpy函数类似于strncpy。

例:


#include <memory.h>
#include <string.h>
#include <stdio.h>
int main()
{
int aa[] = { 1,2,3,4 };
int bb[10] = { 0 };
memcpy(bb, aa, 4 * sizeof(int));//把aa数组中4*4(每个int类型是4字节)内容拷贝到bb数组
for (int i = 0; i < 10; i++) //打印bb数组全部数据
{
printf("%d ", bb[i]);
}
}

最后bb字符串中前4*4个字节的内容被改为aa的内容

C语言内存操作函数详解

注意 :memcpy不能拷贝重叠内存。


#include <memory.h>
#include <string.h>
#include <stdio.h>
int main()
{
int aa[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memcpy(aa + 2, aa, 24);
for (int i = 0; i < 10; i++)
{
printf("%d ", aa[i]);
}
}

输出:

C语言内存操作函数详解

拷贝重叠内存会出现这样的问题。

2.memmove

作用:内存拷贝(可拷贝重叠内存)

原型:


void *memmove( void *dest, const void *src, size_t count );

使用与memcpy一样,只是memmove可以拷贝重叠内存


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

出:

C语言内存操作函数详解

同样的代码使用memmove就可以.

3.memcmp

作用:内存比较

函数原型:


int memcmp( const void *buf1, const void *buf2, size_t count );

使用:

使用格式:memcmp(地址1,地址2,想要比较的内存大小 单位bit)

C语言内存操作函数详解

逐字节比较内存大小,

逐字节一对一对比较!!

返回值有三种情况:

<0 “参数1” 与 “参数2” 逐字节比较时遇到的第一对不同的内存时 “参数1” 中数据 < “参数2”。

=0 “参数1” 与 “参数2” 中的前“ 参数” 三个字节的内容完全相等。

>0 “参数1” 与 “参数2” 逐字节比较时遇到的第一对不同的内存时 “参数1” 中数据 > “参数2”。

4.memset

作用:内存设置

函数原型:


void *memset( void *dest, int c, size_t count );

使用:

使用格式:memset(地址,一个数,设置多少字节)

例:


#include <memory.h>
int main()
{
int a[] = {1,2,3,4,5};
memset(a, 1, 20);//把从a开始的前二十个字节内容改成1
}

结果:

C语言内存操作函数详解

来源:https://blog.csdn.net/wwhdsg/article/details/120740424

标签:C语言,内存,操作,函数
0
投稿

猜你喜欢

  • SpringBoot实现redis缓存菜单列表

    2023-11-24 07:39:20
  • springboot集成本地缓存Caffeine的三种使用方式(小结)

    2021-06-29 07:00:40
  • 使用Java反射模拟实现Spring的IoC容器的操作

    2023-06-03 17:37:42
  • Android仿知乎悬浮功能按钮FloatingActionButton效果

    2021-08-04 16:33:47
  • C#算法之整数反转

    2021-09-24 18:36:49
  • C# 无边框窗体之窗体移动实现代码

    2021-07-22 04:36:48
  • Java Hibernate对象(瞬时态,持久态,脱管态)详解

    2022-05-22 20:07:32
  • Java设计模式之java桥接模式详解

    2023-10-15 15:19:10
  • Android中Listview点赞功能的实现

    2023-06-21 11:49:59
  • springboot项目启动慢的问题排查方式

    2023-06-19 18:58:40
  • Java实现文件批量重命名,移动和删除

    2022-02-27 03:32:19
  • Android编程实现获取新浪天气预报数据的方法

    2022-08-15 22:14:44
  • c++ 虚继承,多继承相关总结

    2022-11-19 12:09:35
  • java.util.NoSuchElementException原因及两种解决方法

    2022-02-10 15:18:58
  • Android设置Activity背景为透明style的简单方法(必看)

    2021-08-13 14:20:18
  • JAVA得到数组中最大值和最小值的简单实例

    2023-03-18 01:19:39
  • SpringMVC使用RESTful接口案例详解

    2022-08-08 23:41:52
  • Java 反转带头结点的单链表并显示输出的实现过程

    2022-06-08 18:34:39
  • Struts2修改上传文件大小限制方法解析

    2023-02-22 21:13:19
  • Java Online Exam在线考试系统的实现

    2022-01-30 13:49:35
  • asp之家 软件编程 m.aspxhome.com