内存操作函数(memcpy、memmove、memcmp、memchr、memset)

存在内存操作函数的意义:对任何类型都适用,只要按照字节操作。

memcpy函数:

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

注:memcpy函数从src的位置向后复制count个字节到dest的内存位置;

这个函数在遇到'\0'不会停下来;

如果src和dest有任何的重叠,复制的结果都是未定义的。

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

有以上代码可知:memcpy可以将整个结构体拷贝给另一个结构体。当然也可以拷贝整个数组及其他。

memmove函数:

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

和memcpy的差别是memmove函数处理的源内存块和目标内存块是可以重叠的。

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

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

memcmp函数:

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

比较从buf1和buf2指针开始的num个字节。

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

比较8个字节,因为'd'的ASCII码大于‘D’。

memchr函数:

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

在buf的count个字节查找字符c。

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

memset函数:

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

memet函数用于初始化。

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

但是如果设置为0呢?

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

可以看到可以初始化为0.

那如果设置为整数1呢?

内存操作函数(memcpy、memmove、memcmp、memchr、memset)

16843009其实是1111,也就是说将每个元素的四字节全都初始化为1,因为0将四个字节初始化为0元素还是为0。

所以需要注意的是memset是按字节进行初始化的。

本篇博客里所有函数都是按字节操作的。