点进来-->轻松学习“内存函数”

目录

1. memcpy使用和模拟实现

2. memmove使用和模拟实现

3. memset函数的使用

4. memcmp函数的使用

总结


1. memcpy使用和模拟实现

memcpy函数原型如下:

void * memcpy ( void * destination, const void * source, size_t num );
  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置
  • 这个函数在遇到 '\0' 的时候并不会停下来。
  • 如果source和destination有任何的重叠,复制的结果都是未定义的。
  • 这四个内存函数都要包含string.h头文件。

点进来-->轻松学习“内存函数”_第1张图片

运行结果如下:

这里将arr1中所有元素都复制到arr2中,是因为memcpy函数第三个参数复制40个字节,就是10个整形的大小.我们已经了解memcpy的特性了,下面我们尝试模拟实现memcpy这个函数吧:

点进来-->轻松学习“内存函数”_第2张图片

assert是断言,可以判断dest和src这两个指针是否有效,如果是空指针,自动停止程序运行,加强程序的健壮性。在while循环中,先将两个指针强制类型转换成char类型。因为内存函数处理类型有许多种,可以是short,int,long,甚至是结构体类型,所以转换成char就可以很好的复制数据。


2. memmove使用和模拟实现

函数原型如下:

void * memmove ( void * destination, const void * source, size_t num );
  • 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。

  • 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。

点进来-->轻松学习“内存函数”_第3张图片

现在我们尝试模拟实现memmove函数。在模拟实现之前,我们得搞明白,它的原理是什么。我们以0~9这十个数字为例。源头是{2,3,4,5,6},即src指针指向的数。在src左边的数,假设从0开始为目的地的数字,dest指针指向的数,需要从源头这组数从2开始拷贝,便是从前到后拷贝的方式。在src右边的数,需要源头这组数从6开始拷贝,是从后向前拷贝的方式。其实从7开始,不管是从前向后还是从后向前的房都可以,不过为了方便,直接划分为从后向前的方法里。

点进来-->轻松学习“内存函数”_第4张图片

代码如下(仅供参考):

点进来-->轻松学习“内存函数”_第5张图片


3. memset函数的使用

函数原型如下:

void * memset ( void * ptr, int value, size_t num );

memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。第一个参数是改变位置的起始点,第二个参数是要重置的元素,第三个参数要重置的个数。

点进来-->轻松学习“内存函数”_第6张图片

输出的结果:


4. memcmp函数的使用

函数原型如下:

int memcmp ( const void * ptr1, const void * ptr2, size_t num );
  • ⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节
  • 返回值如下:

点进来-->轻松学习“内存函数”_第7张图片

点进来-->轻松学习“内存函数”_第8张图片


总结

C语言内存函数也是需要掌握的内容,内存函数还是比较实用的。所以不能忽略这一块内容,多敲多练。多多重复,百炼成钢

创作不易,如果喜欢这篇文章的话,请留下你的三连哦,你的支持是我最的的动力!!!

点进来-->轻松学习“内存函数”_第9张图片

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