关于内存函数的使用以及实现,昨天我们讲了关于string类型常用的函数使用以及实现,今天说一下关于内存函数的使用以及实现。
其中我们今天要介绍的内存函数有四个
memcpy
memmove
memcmp
memset
其中我们只实现一下memcpy和memmove剩下两个介绍一下
首先我们看一下memcpy
memcpy是一个拷贝函数,而昨天的strcpy是只可以拷贝字符类型的函数,而memcpy都可以拷贝,可是为什么所有的类型都可以拷贝?
首先我们来看一下他的参数,他的参数是两个void类型的两个指针,其中讲source 指针指向的内容拷贝num个到dest指向的位置,返回值是一个void类型的一个指针,返回拷贝后的指针。
我们来看一下,我们将被拷贝指针指向的num个字节拷贝到目标指针指向的位置,所以我们需要将void类型的指针,强制转化为char类型的一个指针,然后依次拷贝num个字节
下面我们介绍一下memmove
memmove也是一个类似于拷贝的函数(其实这玩意和memcpy没啥区别,参数返回值都一样) ,但是mem可以自己给自己拷贝(不过现在的memcpy也可以给自己拷贝),下面介绍一下如何实现
memmove函数的参数以及返回值和memcpy都是相同的,同样的void的指针的意思也是相同的,为了可以接收所有的指针类型,我们来看一下他们是怎么样实现的
其中分几种情况
首先是我们将str指向的3个值拷贝到dest指向的三个值中,此时如果我们从前向后拷贝的时候会成这样
就会变成这样,导致后面的值会被覆盖,导致拷贝出错,所以这时候我们应该从后向前拷贝
还有一种情况
就是被拷贝的指针在目标指针的后面,此时如果我们从后向前拷贝的话就会成了这样
同样导致值被覆盖,所以这时候我们应该从前向后拷贝
最后一种情况
这种情况下,两个指针指向的空间没有交集,所以我们不管是从前向后或者是从后向前拷贝都是没有问题的,所以现在我们来看一下如何实现
所以我们总结一下就是这样的,现在来看如何实现一目了然
我们我们在拷贝的时候要判断一下str和dest的大小,如果dest小于str这时候我们要从后向前拷贝,str大于dest就从前向后
下面我们简单介绍一下剩下的两个函数
这两个函数memcmp是用来比较的,同样是转化为char类型的指针然后一个一个字符进行比较
memset是用来设置内存中的值,但是他是一个字符一个字符设置