内存操作函数memcpy等的用法解析

版权声明:问渠哪得清如许?转载请注明出处。 https://blog.csdn.net/weixin_40108380/article/details/78353391

1. memcpy

  • 函数原型
void *memcpy(void *dst, const void *src, size_t size);
  • 使用说明:将一块内存的数据复制到另一块内存。当两块内存重叠的时候,memcpy就不能保证拷贝正确。

2. memmove

  • 函数原型
void *memmove(void *dst, const void *src, size_t size);
  • 使用说明:可以拷贝内存重叠的,也可以拷贝不重叠的。

3. memset

  • 函数原型
void* memset(void *dest,int c,size_t size);
  • 使用说明:给出内存的起始地址dest,将从起始地址开始的size个字节赋值为字符c。

问题:

  1. 为什么要写成void型指针呢?
    主要是为了可以接收各种类型的指针,因为我们有时想拷贝的区域是存放整 形数的,有时想拷贝的区域是存放字符串的,我们总不能根据内存区域数据的类型经常改函数参数吧,这样得有多麻烦呀~所以用void*就比较好~
    函数的返回值是void*类型,这一点类似上边的参数。
    另外需要注意的是,void型的指针不能进行自加操作,也不能进行解引用,所以函数中都进行了强制类型转化。因为操作过程中是一个字节一个字节进行,所以强制转化成char *。比如:
void *p;
p++;   //错误
*p = 1;//错误

猜你喜欢

转载自blog.csdn.net/weixin_40108380/article/details/78353391