C语言内存函数

在之前的两篇博客中,我讲到了字符函数以及字符串函数。在前面的两篇博客中我讲的函数全部都是只适用于字符类型的数据。但是大家想一想,在C语言中,又不止字符型的变量。所以,在C与语言中,我们又有一些函数,用来使用,它们就是内存函数,这些函数在使用的时候的特点就是。它们不限定类型,只要是存贮在内存中的函数都可以使用这些函数。好了,废话不多说,接下来我将给大家展示一下这些函数。

1.memcpy使用和模拟实现

今天讲的第一个函数就是我们的memcpy函数,这个函数,就像他的前缀一样,mem就是memory的意思,就是代表内存的意思。好了,接下来,我来给大家展示一下这个函数的一般形式,大家请看下面的代码块。

cpp 复制代码
void * memcpy (void * destination,const void * source, size_t num);

功能:这个函数是将source中的数据看拷贝到destination中去。拷贝的数据个数是num个字节。这个函数再拷贝数据的时候不会限定数据的类型。再次强调一下,这个num的单位是字节,所以大家不要搞错了

这个函数在使用的时候需要包含<string.h>这个头文件。

特殊情况:如果destination和source中的数据有重复的部分,就不能使用这个函数。

返回值:返回的都是目标空间的起始位置。

好了,接下来,我来给大家演示一下这个函数的使用,大家请看下面的图片。

上面的代码展示的就是这个函数的作用了,这是我通过调试的结果,所以大家也可以自己在编译器上尝试尝试。接下来,我来给到大家模拟实现一下这个代码,这样会让大家理解更深刻,大家请看下面的模拟代码的图片。

上面的代码就是我们自己实现的一个memcpy的函数代码,在这里我想要强调几点。因为我们自己写的函数的返回类型是void*型,这个类型不能直接解引用,需要强制类型转换之后才可以使用,相比之下,因为这个函数的num的单位是字节,所以强制转化成char*型是最好的,因为char*这种类型的长度为一个字节。这就是我想强调的地方了,大家也可以在编译器上自己试着敲一下这个代码。

2.memmove使用

接下来这个函数,和上面的函数很像。大家是否还记得我在上文写到了memcpy在对于重复的数据时,是无法起作用的,那么我们该怎么办呢?接下来就该我们的memmove出场了,这个函数对于重复的两个数据能够起作用。接下来,我来给大家展示一下这个函数的一般形式,大家看下面的代码块。

cpp 复制代码
void * mememove (void * destination,const void * source,size_t num);

其实大家发现没有,这个形式和上面的memcpy的形式是一样的,所以它们的参数也都是相同的功能。只不过这个函数可以用在重叠的数据上。接下来,我就来给大家展示一下这个函数的使用,大家请看下面的代码图片。

这就是这个函数在遇到重叠的部分的强大之处。因为我这个编译器时vs2022,所以这个编译器在设定memcpy和memmove的时候设定是一样的,所以对于我这个编译起来说,memcpy也可以解决重叠的情况。所以在这里我无法给大家展示出区别,但是在其他的编译器上这两个函数是一定有区别的,而且memmove这个函数更加的灵活,要是感兴趣的朋友,可以在其他的编译上尝试一下,就用我上面的那段代码。

3.memset的使用

接下来的这个函数,大家听名字应该就知道了,这是设置函数,可以将特定长度的数据设置为自定义的内容。接下来,我来给大家展示一下这个函数的一般形式,大家看看下面的代码块。

cpp 复制代码
void * memset (void * ptr,int value,size_t num);

参数:ptr指针指向的是被设置内用的空间,value是要设置的内容,num是要设置的长度,单位为字节。这个函数的返回类型是void*型。返回的是被设置空间的起始位置。接下来,我就来给大家展示一下这个函数的使用,大家请看下面的代码图片。

上面的代码就是这个函数的使用特点,大家也可以自己在编译器上尝试一下。

4.memcmp函数的使用

当然,对于内存中的类容,也是存在一些比较函数的,这个函数就是memcmp。接下来,我来给大家展示一下这个函数的一般形式,大家请看下面的代码块。

cpp 复制代码
int memcmp (const void * ptr1,const void * ptr2,size_t num);

这个函数的功能就是比较两块指定内存的空间内容。比较从ptr1和ptr2指针指向的位子开始,向后的num个字节。返回的值是一个整型,接下来,我来给大家看看返回值的不同情况。

当ptr1>ptr2时,返回值返回的是大于0的数

当ptr1<ptr2时,返回的是小于0的数

当ptr1=ptr2时,返回值为0.

接下来,我就来给大家展示一下这个函数的使用,大家请看下面的代码图片。

好了,这就是今天博客分享的内容,希望我的博客对你的C语言学习有帮助,我们下一篇博客再见!!!

相关推荐
任子菲阳2 小时前
学JavaWeb第七天——yml配置文件 & 后端实战Tlias案例
java·开发语言·spring
AI科技星2 小时前
空间光速螺旋动力学:统一质量、引力、电磁与时空本源的公理化理论与全现象验证
c语言·开发语言·opencv·算法·r语言
qq_404265832 小时前
C++中的代理模式实战
开发语言·c++·算法
liuyao_xianhui2 小时前
动态规划_最大子数组和_C++
java·开发语言·数据结构·c++·算法·链表·动态规划
焦糖玛奇朵婷2 小时前
盲盒抽卡机小程序搭建,探索卡牌市场
大数据·开发语言·程序人生·小程序·软件需求
liulilittle2 小时前
C++实现广播地址计算
开发语言·c++
2501_941982052 小时前
Java 实现企业微信外部群机器人:自动化消息交互
开发语言·python
学习永无止境@2 小时前
Vivado FPGA输入时钟约束
开发语言·fpga开发·fpga
梦想的旅途22 小时前
企业微信自动化操作的高效实现方案
开发语言·javascript·ecmascript