##内存操作函数
1.memcpy函数
首先先来介绍一下这个函数,可以分为两个部分,分为mem 和 cpy.
mem是memories(记忆)的意思,在计算机中称为“内存”的意思。而cpy是
copy(拷贝)的意思啦。
下面我们来看一下这个函数如何使用,这个函数可以用来拷贝任何类型的数据比如整形,字符型等等,而这里就有一个疑惑,这跟strcpy函数有什么不一样呢?strcpy只适用于字符之间的拷贝,而这个函数使用的范围更广泛,使用memcpy函数需要注意以下几点:
1.memcpy函数类型

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

2.这个函数遇到‘\0’不会停下来。
3.memcpy函数在src的位置开始向后复制num个字节的数据到des指向的内存位置。
下面我们来写一个代码来了解这个函数
当我们运行一下结果,看一下是否改变了呢?
在这里插入图片描述
这里可以看出arr2确实拷贝了arr1的数据。

模拟实现memcpy函数
在这里插入图片描述

在这里插入图片描述
这里可以看出arr1中前5个数据拷贝到了arr2中,那么这个模拟实现函数就是没问题的。

2.memmove函数
这个函数跟memcpy函数的功能相似,只不过memmove函数能解决源内存块和目标内存块的重叠问题。
比如我们想要把arr1的某些数据复制到arr2的某些数据
在这里插入图片描述

我们可以看出这个memmove函数可以完成,但是如果我们memcpy函数呢?会是什么结果呢?
在这里插入图片描述
结果也是可行的,只不过就是说memmove函数更高效一点

memmove函数的模拟实现
在这里插入图片描述
但是如果我们继续思考,如果我们遇到从前往后的数据呢?我们该如何写呢?
在这里插入图片描述

3.memset函数

void*(void*ptr1,const int sz,size_t num);

memset是用来设置内存的,将内存中的值以字节为单位设置成自己想要的内容。

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

在这里插入图片描述
4.memcmp函数

void*(void*ptr1,const void* ptr2,size_t num);

内存的比较,这个我们也学会如何使用就可以了

在这里插入图片描述
当arr1>arr2是,返回大于0的值

在这里插入图片描述

arr1<arr2时,返回小于0的值

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐