进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset

//内存操作函数
1.memcpy
2.memmove
3.memcmp
4.memset
 

之前介绍了字符串操作函数,现在我们来介绍一下内存操作函数

进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset_第1张图片

memcpy函数拷贝内存信息到目标空间,是按bit为单位来拷贝

#include
#include
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr1[5] = { 0 };
	memcpy(arr1, arr, 20);//拷贝1,2,3,4,5到arr1里,需要拷贝20个字节

	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;

进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset_第2张图片

 


模拟实现memcpy

//模拟实现memcpy
#include
void* my_memcpy(void* dest,void* src, size_t num)
{
	assert(dest && src);//断言
	void* ret = dest;

	while (num--)//
	{
		*(char*)dest = *(char*)src;//强制类型转换为char* ,然后一个字节一个来换
		dest = (char*)dest + 1;//换完一个字节向后+1,进行下一个字节的交换
		src = (char*)src + 1;
	}
	return ret;//交换完成后返回地址
}


int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[5] = { 0 };
	my_memcpy(arr2, arr1, 20);

	int sz = sizeof(arr2) / sizeof(arr2[0]);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset_第3张图片


问题:假如我想在一个数组里将几个元

素拷贝到后面几个元素,如何?

进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset_第4张图片

程序挂了。。。。。。所以综上所述,my_memcpy不能实现重叠


那想自己拷贝自己就得使用另外一个函数--------memmove

进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset_第5张图片

 

int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//运用模拟实现的memcpy将数组里的12345拷贝到34567上,如何?

	//my_memcpy(arr1 + 2, arr1, 20);

	memmove(arr1 + 2, arr1, 20);
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

 进阶C语言------>内存操作函数——//memcpy//memmove//memcmp//memset_第6张图片

 memmove代码使用如图


模拟实现memmove

void* my_memmove(void* dest, const void* src, size_t count)//从后往前拷贝(从前往后拷贝),具体问题具体分析
{
	assert(dest && src);
	void* ret = dest;

	if (dest < src)
	{
		//前后
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		//后前

		while (count--)
		{

		}
	}

//---------------------------------------------------------------------------
//memcmp
//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[] = { 1,2,3,4,0x11223305 };
//	int ret = memcmp(arr1, arr2,17);//一对字节一对字节进行比较
//	printf("%d\n", ret);
//	return 0;
//}

//------------------------------------------------------

//memset 内存设置
//#include
//int main()
//{
//	int arr[] = { 2,3,4,5 };
//	memset(arr, 6, 10);//20代表设置多少个字节,memset是一个字节一个字节改的
//
//	return 0;
//}

你可能感兴趣的:(c语言)