内存操作函数(C)
来源:互联网 发布:华为畅享5手机壳淘宝 编辑:程序博客网 时间:2024/05/22 03:46
1. 名称:malloc / calloc
功能:动态内存分配函数
头文件:#include <stdlib.h>
函数原型:void *malloc(size_t size);
void *calloc(int num, size_t size);
其中:num为分配内存块的个数,size为分配内存块的大小
返回值:分配成功返回分配内存块的首地址,失败返回NULL。
区别:(1)malloc一次只能申请一个内存区,calloc一次可以申请多个内存区;
(2)malloc不会对分配的内存初始化,calloc会初始化为0。
2. 名称:free
功能:动态内存释放函数
头文件:#include <stdlib.h>
函数原型:void free(void *ptr);
ptr为malloc或calloc等内存分配函数返回的内存指针。
返回值:无
注:malloc和calloc跟free是一一对应的关系,若动态分配内存没有free释放,容易造成内存泄露。
3. 名称:memcpy
功能:拷贝内存空间
头文件:#include <stdlib.h>
函数原型:void *memcpy(void *dest, void *src, size_t n);
其中:dest为目标内存区,src为源内存区,n为需要拷贝的字节数
返回值:指向dest的指针
局限性:未考虑内存重叠情况
函数实现:
4. 名称:memmove
功能:拷贝(移动)内存空间
头文件:#include <stdlib.h>
函数原型:void *memmove(void *dest, void *src, size_t n);
其中:dest为目标内存区,src为源内存区,n为需要拷贝的字节数
返回值:指向dest的指针
相比memcpy:当dest与src重叠时,仍能正确处理,但是src内容会被改变
函数实现:
5. 名称:memset
功能:初始化指定内存空间
头文件:#include <stdlib.h>
函数原型:void *memset(void *buffer, int c, size_t n);
其中:buffer为分配的内存,c为初始化你内容,n为初始化的字节数
返回值:指向buffer的指针
特别注意:memset是按字节为单位对buffer指向的内存赋值
例:int a[5];
memset(a, 3, 5*sizeof(int)); //错误
上述情况下每个int元素被初始化为:00000011 00000011 00000011 00000011
memset(a, 0, 5*sizeof(int)); //正确,全部初始化为0
6. 名称:memcmp
功能:比较两个内存空间的字符
头文件:#include <stdlib.h>
函数原型:int memcmp(const void *buf1, const void *buf2, size_t n);
其中:n为要比较的字符数
返回值:当buf1 > buf2时,返回 > 0;当buf1 = buf2时,返回 = 0;当buf1 < buf2时,返回 < 0。
功能:动态内存分配函数
头文件:#include <stdlib.h>
函数原型:void *malloc(size_t size);
void *calloc(int num, size_t size);
其中:num为分配内存块的个数,size为分配内存块的大小
返回值:分配成功返回分配内存块的首地址,失败返回NULL。
区别:(1)malloc一次只能申请一个内存区,calloc一次可以申请多个内存区;
(2)malloc不会对分配的内存初始化,calloc会初始化为0。
2. 名称:free
功能:动态内存释放函数
头文件:#include <stdlib.h>
函数原型:void free(void *ptr);
ptr为malloc或calloc等内存分配函数返回的内存指针。
返回值:无
注:malloc和calloc跟free是一一对应的关系,若动态分配内存没有free释放,容易造成内存泄露。
3. 名称:memcpy
功能:拷贝内存空间
头文件:#include <stdlib.h>
函数原型:void *memcpy(void *dest, void *src, size_t n);
其中:dest为目标内存区,src为源内存区,n为需要拷贝的字节数
返回值:指向dest的指针
局限性:未考虑内存重叠情况
函数实现:
void *memcpy(void *dest, void *src, size_t n){ char *ret = char *dest; char *dest_t = ret; char *src_t = char *src; while(n--) { *dest_t++ = *src_t++; } return ret;}
4. 名称:memmove
功能:拷贝(移动)内存空间
头文件:#include <stdlib.h>
函数原型:void *memmove(void *dest, void *src, size_t n);
其中:dest为目标内存区,src为源内存区,n为需要拷贝的字节数
返回值:指向dest的指针
相比memcpy:当dest与src重叠时,仍能正确处理,但是src内容会被改变
函数实现:
void *memmove(void *dest, void *src, size_t n){char *ret = char *dest;char *dest_t;char *src_t;if((unsigned char *dest <= unsigned char *src) || (unsigned char *dest >= unsigned char *src + n)){dest_t = char *dest;src_t = char *src;while(n--){*dest_t++ = *src_t++; //正向拷贝}}else{dest_t = char *dest + n - 1;src_t = char *src + n - 1;while(n--){*dest_t-- = *src_t--; //反向拷贝}}return ret;}
5. 名称:memset
功能:初始化指定内存空间
头文件:#include <stdlib.h>
函数原型:void *memset(void *buffer, int c, size_t n);
其中:buffer为分配的内存,c为初始化你内容,n为初始化的字节数
返回值:指向buffer的指针
特别注意:memset是按字节为单位对buffer指向的内存赋值
例:int a[5];
memset(a, 3, 5*sizeof(int)); //错误
上述情况下每个int元素被初始化为:00000011 00000011 00000011 00000011
memset(a, 0, 5*sizeof(int)); //正确,全部初始化为0
6. 名称:memcmp
功能:比较两个内存空间的字符
头文件:#include <stdlib.h>
函数原型:int memcmp(const void *buf1, const void *buf2, size_t n);
其中:n为要比较的字符数
返回值:当buf1 > buf2时,返回 > 0;当buf1 = buf2时,返回 = 0;当buf1 < buf2时,返回 < 0。
- 内存操作函数(C)
- 内存操作函数(C)
- 内存操作函数(C)
- 内存操作函数(C)
- c内存操作函数
- C内存操作函数
- c语言内存操作函数
- C语言内存操作函数
- c语言内存操作函数
- C语言 内存操作函数
- c语言内存操作函数
- C语言 内存操作函数
- C语言内存(堆内存\栈内存)操作函数大全
- 内存操作函数全集 Linux C
- c语言内存操作函数汇总
- C语言中内存操作函数
- Linux C 函数 内存及字符串操作
- C语言内存操作函数汇总
- Js中replace()的用法
- I-jetty的web应用
- 十月23日
- 借助磁盘修理工具解决Boot Camp助理的分区问题
- SQL Server 2005 sa用户登录失败?
- 内存操作函数(C)
- iPhone开发【四】常用控件之ActionSheet与AlertView
- Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- pscp详解
- Socket通讯(objetive-c)客户端与(JAVA)服务端的特殊点
- 小小耳机大学问
- 正则表达式-将秒数转化为时间格式
- 任小笨空间伤感日志:享受瞬间的华丽、绽放凄美的诀别
- Select()系统调用及文件描述符集fd_set的应用