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;
}
相关推荐
君义_noip2 小时前
CSP-S 2025 提高级 第一轮(初赛) 阅读程序(1)
算法·深度优先·信息学奥赛·初赛
脉动数据行情2 小时前
Python 实现融通金行情数据对接(实时推送 + K 线 + 产品列表)
开发语言·python
小O的算法实验室2 小时前
2026年IEEE TEVC,知识引导的竞争进化算法用于多解传感器-武器-目标分配问题,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
khalil10202 小时前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
学习3人组2 小时前
柔性排产时序算法+中间过程+阶段目标 细化表格
算法·mes
skywalk81633 小时前
Trae生成的中文编程语言关键字(如“定“、“函“、“印“等)需要和标识符之间用 空格 隔开,以确保正确识别
服务器·开发语言·编程
he___H3 小时前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
呃呃本3 小时前
算法题(回溯)
算法
红色的小鳄鱼3 小时前
前端面试js手写
开发语言·前端·javascript
海盗12343 小时前
C#中的IEqualityComparer<T>使用
开发语言·c#