1.malloc函数
该函数语法如下
void * malloc(size_t size)
参数为size_t size ,单位是字节,返回类型为void*.该函数的用法很简单,我们可以将返回的类型强转换成自己想要的类型,根据自己的需要,来转换示例代码如下:
int * p=(int*)malloc(50);
char* pp=(char*)malloc(40);
2.calloc函数
calloc函数语法如下
void* calloc (size_t num, size_t size);
calloc函数是为num个大小为size(字节)的元素开辟一块空间,这块空间会初始化为0;
它的用法也很简单代码如下:
int main()
{
int* p = (int*)calloc(10, sizeof(int));
if (p != NULL)
{
for (int i = 0; i < 10; i++)
{
*(p + i) = i;
}
}
for (int j = 0; j < 10; j++)
{
printf("%d ", *(p + j));
}
free(p);
p = NULL;
return 0;
}
上面这段代码是将开辟好的空间赋值,并打印出来;
3.realloc函数
realloc函数让动态内存管理更灵活,它的语法如下:
void* realloc (void* ptr, size_t size);
ptr是要调整的空间的起始位置,size是要调整新的空间大小;它的返回值是调整后的空间的起始位置,
但是在分配空间时分为两种情况
1.原空间后面空间足够大,此时该函数的返回值还是原来没调整空间的起始位置
2.原空间后面的空间,不够你想要的空间的大小,这是realloc函数会重新开辟一块空间,并将原空间的值拷贝回来,这时函数的返回值为开辟新的空间的起始位置.
4.free函数
这个函数说俗点就是为前面函数擦屁股的,它可以将开辟的空间释放掉.
该函数用法也很简单语法如下:
void free (void* ptr);
ptr是你开辟空间的起始位置,将它放到free函数中就将你开辟的空间给释放掉了.
5.补充
1.当你在开辟一块空间的时候,一定要判断,这个空间是否开辟成功,上面三个函数开辟空间如果开辟不成功,会返回空指针,也就是判断返回的是不是空指针.在介绍calloc函数那一段代码有体现.
2.当你在释放一块空间的时候,那块空间是被释放了,但是指向起始位置的指针还在,如果不将该指针置为空指针,那它就成了野指针,野指针是非常危险的.
3.上面三个函数可以和柔性数组结合使用,这里就不介绍了.