IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 纯是干货,这些C语言内存函数你都了解吗? -> 正文阅读

[C++知识库]纯是干货,这些C语言内存函数你都了解吗?


这期给大家博主给大家介绍一下C语言都有那些内存函数,干货满满哦,一定要耐心看完。

一、memcpy()函数

1、memcpy的介绍及使用

memcpy()函数是C/C++使用的内存拷贝库函数,既然是库函数,我们先来了解一下它的功能以及参数吧
在这里插入图片描述
在这里插入图片描述
由以上我们可以知道memcpy()一共有三个参数,返回值是void*

(a)viod* destination —— 拷贝的目标内存地址
(b)const void* source —— 拷贝的原始内存地址
(c)size_t num —— 拷贝的字节数 

下面我们来看看它的使用,废话不多说,直接上代码

int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[10];
	//现在我们要将arr1中的前半部分拷贝到arr2中,使用memcpy
	memcpy(arr2, arr1, sizeof(arr1) / 2);//拷贝20个字节
	printf("拷贝后:\n");
	for (int i = 0; i < sizeof(arr1) / (2 * sizeof(int)); i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

2、模拟实现memcpy()函数

//模拟实现memcpy()函数
void* my_memcpy(void* dest, const void* src, size_t num)
{
	assert(dest && src);
	void* p = dest;
	while (num--)
	{
		*((char*)dest) = *((char*)src);
		(char*)dest = (char*)dest + 1;
		(char*)src = (char*)src + 1;
	}
	return p;
}
int main()
{
	char str1[] = "hello world!";
	char str2[10] = "xxxxxxxxx";
	//把hello拷贝到str2中
	my_memcpy(str2, str1, 5);
	printf("%s\n", str2);
	return 0;
}

二、memmove()函数

1、memmove的介绍及使用

下面我们来看看memmove()函数的参数及返回值
在这里插入图片描述
在这里插入图片描述

注意:
1.咋这一看参数和返回值与memcpy一模一样呢,是的,他们参数一样,有什么区别呢,请耐心看完文章。
2.memmove()函数也是C语言库函数中的拷贝函数,但是它拷贝的是同一个数据中的内容

下面来看看它如何使用,上代码

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//这里我们想把1 2 3 4 5 拷贝到3 4 5 6 7的位置
	memmove(arr + 2, arr, 20);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

2、模拟实现memmove()函数

//模拟实现memmove()函数
void* my_memmove(void* dest, const void* src, size_t num)
{
	//断言,防止传入空指针
	assert(dest && src);
	void* p = dest;//记录起始地址
	//目的地址比拷贝原始地址小时,从左往右拷贝
	//这样可以保证拷贝时把数据给覆盖掉
	if (dest < src)
	{
		while (num--)
		{
			*((char*)dest) = *((char*)src);
			(char*)dest = (char*)dest + 1;
			(char*)src = (char*)src + 1;
		}
	}
	else //反之从右往左拷贝
	{
		while (num--)
		{
			*((char*)dest + num) = *((char*)src + num);
		}
	}
	return p;
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(arr + 2, arr, 20);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

三、总结

memcpy()与memmove()的区别

memcpy()与memmove()都是库函数中的拷贝函数
但是memcpy是从另一个数组拷贝另一个
而memmove是在同一个数组中进行操作的
这里注意的是:有些编辑器在实现memcpy的时候把它完美实现了,既能在不同数组中操作,也能在同一个数组中操作,这里小编建议在使用的时候还是把它们区别开来比较好

在这里插入图片描述
结语:

每个人的成长和进步都离不开点点滴滴的积累,如果小编的内容对您有所帮助,希望友友们三连加关注哦,你的支持是小编创作的最大动力。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:47:57  更:2022-09-15 01:49:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:22:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码