C语言中的内存函数你知道多少呢?

目录

 ​编辑

1. memcpy的使用和模拟实现

1.1函数介绍

​编辑

1.2函数的使用

1.3模拟实现

2. memmove的使用和模拟实现

2.1函数介绍

2.2函数的使用

2.3模拟实现

3. memset函数的使用

3.1函数介绍

3.2函数的使用

​编辑

4. memcmp函数的使用

4.1函数介绍

4.2函数的使用

完结散花


 

                           不是每个人都能做自己想做的事,成为自己想成为的人。

                                                  克心守己,律己则安

创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 

1. memcpy的使用和模拟实现

1.1函数介绍

C语言中的内存函数你知道多少呢?_第1张图片

注:使用该函数需要引用头文件#include 

1.2函数的使用

假设我们要将arr1中的前20个字节拷贝到数组arr2中~

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

 运行效果如下~

我们可以看到屏幕上打印了1 2 3 4 5 ~怎么样,使用是不是很简单呢?

1.3模拟实现

那让我们模拟实现一下这个函数,相信我们会对其有更加深刻的理解呢~

.  模拟实现之前我们还要了解一下指针类型void*

.  当我们无法确定传递过来的实参的指针是什么类型时,我们就可以用void*来接受

.  但我们还要知道的一点是对于指针void*,我们无法对其进行指针运算

void* my_memcpy(void* dest, const void* src, size_t num)
{
	assert(dest && src);//判断指针的有效性
	void* ret = dest;//用ret记录dest目标函数的起始位置
	while (num--)
	{
		//强制类型转化为char*对其进行指针运算
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
		//*((char*)dest)++ = *((char*)src)++;这种写法在VS2022上可行,但不能确保所有编译器上都可行
	}
	return ret;
}

2. memmove的使用和模拟实现

2.1函数介绍

C语言中的内存函数你知道多少呢?_第2张图片

2.2函数的使用

C语言中的内存函数你知道多少呢?_第3张图片

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

我们来看一下运行效果~

2.3模拟实现

那让我们模拟实现一下这个函数,相信我们会对其有更加深刻的理解呢~

void* my_memmove(void* dest, const void* src, size_t num)
{
	assert(dest && src);
	void* ret = dest;
	if (src>dest)//从前往后复制
	{
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else//从后往前复制
	{
		dest = (char*)dest + num-1;
		src = (char*)src + num-1;
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest - 1;
			src = (char*)src - 1;
		}
		//while (num--)
		//{
		//	*((char*)dest + num) = *((char*)src + num);
		//}这样写也行
	}
	return ret;
}

 算法的图解放在下面啦~

C语言中的内存函数你知道多少呢?_第4张图片

3. memset函数的使用

3.1函数介绍

C语言中的内存函数你知道多少呢?_第5张图片

3.2函数的使用

int main()
{
	int arr[10] = { 0 };
	memset(arr, 1, 20);
	return 0;
}

调试我们看一下效果~

C语言中的内存函数你知道多少呢?_第6张图片

是不是很简单呢~


4. memcmp函数的使用

4.1函数介绍

C语言中的内存函数你知道多少呢?_第7张图片

4.2函数的使用

int main()
{
	int arr1[10] = { 1,2 };
	int arr2[10] = { 1,3 };
	printf("前4个字节比较%d\n", memcmp(arr1, arr2, 4));
	printf("前5个字节比较%d\n", memcmp(arr1, arr2, 5));
	printf("前8个字节比较%d\n", memcmp(arr1, arr2, 8));
	return 0;
}

我们来看一下运行效果~

C语言中的内存函数你知道多少呢?_第8张图片

完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~

你可能感兴趣的:(C语言,c语言,算法,开发语言)