内存操作函数memcpy等的用法解析
2017-10-26 14:23
232 查看
1. memcpy
函数原型
使用说明:将一块内存的数据复制到另一块内存。当两块内存重叠的时候,memcpy就不能保证拷贝正确。
2. memmove
函数原型
使用说明:可以拷贝内存重叠的,也可以拷贝不重叠的。
3. memset
函数原型
使用说明:给出内存的起始地址dest,将从起始地址开始的size个字节赋值为字符c。
问题:
为什么要写成void型指针呢?
主要是为了可以接收各种类型的指针,因为我们有时想拷贝的区域是存放整 形数的,有时想拷贝的区域是存放字符串的,我们总不能根据内存区域数据的类型经常改函数参数吧,这样得有多麻烦呀~所以用void*就比较好~
函数的返回值是void*类型,这一点类似上边的参数。
另外需要注意的是,void型的指针不能进行自加操作,也不能进行解引用,所以函数中都进行了强制类型转化。因为操作过程中是一个字节一个字节进行,所以强制转化成char *。比如:
函数原型
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。
问题:
为什么要写成void型指针呢?
主要是为了可以接收各种类型的指针,因为我们有时想拷贝的区域是存放整 形数的,有时想拷贝的区域是存放字符串的,我们总不能根据内存区域数据的类型经常改函数参数吧,这样得有多麻烦呀~所以用void*就比较好~
函数的返回值是void*类型,这一点类似上边的参数。
另外需要注意的是,void型的指针不能进行自加操作,也不能进行解引用,所以函数中都进行了强制类型转化。因为操作过程中是一个字节一个字节进行,所以强制转化成char *。比如:
void *p; p++; //错误 *p = 1;//错误
相关文章推荐
- c++中共享内存操作函数解析(三)
- 模拟实现内存操作函数memcpy、memmove
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- c++中共享内存操作函数CreateFileMapping解析(一)
- 内存操作函数memcpy,memccpy,memmove,memchr,memcmp,memicmp,memset
- 内存操作函数memcpy,memccpy,memmove,memchr,memcmp,memicmp,memset
- c++中共享内存操作函数MapViewOfFile解析(二)
- 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()
- C语言中内存操作函数 - memcpy ,memmove
- 共享内存和操作共享内存几个函数的用法
- 内存操作函数memcpy和memmove
- 内存操作函数memcpy、memmove
- 建立共享内存和操作共享内存几个函数的用法
- c语言如何操作内存(数据类型、函数在内存中解析简介)
- 建立共享内存和操作共享内存几个函数的用法
- 关于内存函数GlobalLock(),GlobalAlloc(),GlobalUnLock()用法
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 内存操作函数(C)
- 内存初始化函数memset()用法详解
- 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理