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语言—内存操作函数

一、memcpy

void* memcpy(void* dest, const void* src, size_t num)

notes: strcpy与memcpy区别?1、strcpy()字符串拷贝,它的拷贝结束是需要'\0'的,同时只针对字符串

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2、memcpy()什么类型都可以拷贝,同时可以规定拷贝的个数

各传入参数的含义

(1)dest:即将被拷贝进去的首地址

(2)src:用于拷贝的元素的首地址(因为源地址的内容是不需要改变的因此可以定义为const void* 类型)

(3)num:一共要拷贝的字节数,是一个字节一个字节的拷贝

memcpy()函数的运用

int main()
{
	int arr3[] = { 1, 2, 3, 4, 5, 6, 7, 9, 8, 10 };
	int arr4[5] = { 0 };
	memcpy(arr3, arr4, 5 * sizeof(arr3[0]));
	for (int i = 0; i < 5; i++)
	{
		printf("%d ", arr3[i]);
	}
	return 0;
}

my_memcpy()模拟实现

#include <stdio.h>
#include <assert.h>
//memcpy模拟实现void *memcpy( void *dest, const void *src, size_t count );
void* my_memcpy(void* dest, const void* src, int count)
{
	assert(dest && src);
	for (int i = 0; i < count; i++)
	{
		*((char*)dest + i) = *((char*)src + i);
	}
}

int main()
{
	char arr1[] = "hello************";
	char arr2[] = "www";
	my_memcpy(arr1, arr2, 2);
	printf("%s\n", arr1);
	return 0;
}

二、memmove

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

notes:memmove和memcpy的区别1、memmove()可以进行对内存重叠的拷贝

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2、memcpy()C语言规定只拷贝不重叠的内存,但在VS上也能实现重叠拷贝,无法保证所有编译器都可以

memmove()函数应用

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
	memmove(arr + 1, arr + 3, 20);
	for (int i = 0; i < 11; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

memmove()模拟实现?

?

#include <stdio.h>
#include <assert.h>
//memmove模拟实现void *memmove( void *dest, const void *src, size_t count );
void* my_memmove(void* dest, void* src, int count)
{
	if (dest > src)
	{
		for (int i = count-1; i >= 0; i--)
		{
			*((char*)dest + i) = *((char*)src + i);
		}
	}
	else
	{
		for (int i = 0; i < count; i++)
		{
			*((char*)dest + i) = *((char*)src + i);
		}
	}
}
void show_arr(int* p, int sz)
{
	for (int i = 0; i < sz; i++)
		printf("%d ", p[i]);
	printf("\n");
}
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	show_arr(arr, sz);
	my_memmove(arr, arr + 3, 20);
	show_arr(arr, sz);

}

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:52:35  更:2022-02-16 12:54:33 
 
开发: 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/24 7:56:38-

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