C语言-内存函数

1,memcpy

2,memmove

3,memcmp

4,memset

------------------------------------------------------------------------------------------------------------------

1,memcpy

复制代码
#include<stdio.h>
//memcpy
//内存拷贝函数

//int main() {
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	memcpy(arr2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
//	int i = 0;
//	for ( i = 0; i < 5; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//
//	return 0;
//}

//模拟实现memcpy
#include<assert.h>
//void* my_memcpy(void* dest, const void* src, size_t num) {
//	assert(dest && src);
//	void* ret = dest;
//	while (num--) {
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//
//	}
//	return ret;
//}
//
//void test1() {
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	my_memcpy(arr2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	printf("\n");
//}
#include<string.h>
void test2() {
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//my_memcpy(arr1+2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
	memmove(arr1 + 2, arr1, 20);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
}
int main() {
	test1();
	test2();

	return 0;
}
//memcpy 负责拷贝两块独立空间中的数据
//重叠内存的拷贝,是怎么做的呢?  ===>memmove

2,memmove

复制代码
//模拟实现memmove
#include<stdio.h>
#include<string.h>
//void* my_memmove(void* dest, const void* src, size_t num) {
	assert(dest && src);
	void* ret = dest;
	if (dest<src)
	{
		//前->后
		while (num--) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		//后->前
		while (num--) {
			*((char*)dest+num) = *((char*)src+num);
		}
	}
	return ret;
}
void test3() {
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//my_memcpy(arr1+2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
	my_memmove(arr1 , arr1+2, 20);// 将 3,4,5,6,7  移到 1,2,3,4,5
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
}
int main() {
	//test1();
	test3();

	return 0;
}

3,memcmp

复制代码
#include<stdio.h>
//memcmp 
// 
int main() {
	int arr1[] = { 1,2,3,4,5 };//10 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
	int arr2[] = { 1,3,2 };//01 00 00 00 03 00 00 00 02 00 00 00
	int ret = memcmp(arr1, arr2, 12);
	printf("%d\n", ret);
	return 0;
}

4,memset

复制代码
#include<stdio.h>
//memset
int main() {
	char arr[] = "hello bit";
	memset(arr, 'x', 5);
	//memset(arr+6, 'x', 3);
	printf("%s\n", arr);
	//int arr[10] = { 0 };
	////把arr初始化全为一
	//memset(arr, 1, 40);
	//int i = 0;
	//for ( i = 0; i < 10; i++)
	//{
	//	printf("%d\n", arr[i]);
	//}
	return 0;
}
相关推荐
JieE21210 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack202 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树2 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术3 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦3 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050733 天前
(一)小红的数组操作
算法·编程语言