这篇文章主要介绍了C语言全部内存操作函数的实现详细讲解,作者用图文代码实例讲解的很清晰,有感兴趣的同学可以研究下
头文件:#include<memory.h>
1.memcpy
作用:内存拷贝
函数原型:
void *memcpy( void *dest, const void *src, size_t count );
使用:
使用格式:memcpy(目的地,原,想操作内存大小(单位字节))
把 "参数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的内容
注意 :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]);
}
}
输出:
拷贝重叠内存会出现这样的问题。
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]);
}
}
出:
同样的代码使用memmove就可以.
3.memcmp
作用:内存比较
函数原型:
int memcmp( const void *buf1, const void *buf2, size_t count );
使用:
使用格式:memcmp(地址1,地址2,想要比较的内存大小 单位bit)
逐字节比较内存大小,
逐字节一对一对比较!!
返回值有三种情况:
<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语言内存操作函数详解


- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言详解float类型在内存中的存储方式 2023-03-27
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Qt计时器使用方法详解 2023-05-30
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言qsort()函数的使用方法详解 2023-04-26
- ubuntu下C/C++获取剩余内存 2023-09-18
- Easyx实现扫雷游戏 2023-02-06
- C++ 数据结构超详细讲解顺序表 2023-03-25