memset()
#include<string.h>
void*memset(void*s,int c,size_t n);
功能:
将s的内存区域的前n个字节以参数c填入(用来初始化)
参数:
s:需要操作内存s的首地址
c:填充的字符,c虽然参数为int,但必须是unsigned char,范围为0-255
n:指定需要设置的大小
返回值:
s的首地址
memcpy()
#include<string.h>
void *memcpy(void *dest,const void *src,size_t n)
功能:
拷贝src所指的内存内容的前n个字节到dest所指的内存地址上
参数:
dest :目的内存首地址
src:源内存首地址
n:需要拷贝的字节数
注意:dest所指内存和src所指内存地址不可以重叠
例:
int arr[]={1,2,3,4,5,6,7,8,9};
int*p=arr;
p++;
memcpy(p,arr,36);//错误
此时p所指地址和arr所指地址有重叠
返回值:
dest的首地址
与strcpy()区别
- 函数参数不同
- strcpy()拷贝字符串memcpy()可以拷贝一块内存
- 拷贝结束标志不同,strcpy()以\0结尾,memcpy()以个数为结尾
mommove()
#include<string.h>
void *memcpy(void *dest,const void *src,size_t n)
功能:
拷贝src所指的内存内容的前n个字节到dest所指的内存地址上
拷贝重叠内存地址不会出现问题,但是效率比较低,如果拷贝源与拷贝没有重叠,效率与memcpy一样
memcmp()
#include<string.h>
int memcmp(const void*s1,const void*s2,size_t n);
功能:
比较s1和s2所指向内存区域的前n个字节大小
参数:
s1:内存首地址1
s2:内存首地址2
n:需比较的前n个字节
返回值:
相等:=0
大于:>0
小于:<0
free(堆空间释放)
#include<stdlib.h>
void free(void* ptr);
功能:
释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,指向被释放区域的首地址,对同一内存空间多次释放会出错
参数:
ptr:需要释放空间的首地址,被释放区应是由malloc函数所分配的区域
返回值:
无