void* calloc (size_t num, size_t size)
1、函数的功能是为 num 个大小为 size个字节 的元素开辟一块空间,并且把空间的每个字节初始化为0。
2、与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。
void* realloc (void* ptr, size_t size);
ptr 是要调整的内存地址
size 调整之后新大小
realloc在调整内存空间的是存在两种情况:
情况1:原有空间之后有足够大的空间,就直接在后面补充开辟。
情况2:原有空间之后没有足够大的空间,在堆空间上另找一个合适大小的连续空间来使用,原来已经开辟的空间,将被realloc释放。这样函数返回的是一个新的内存地址。
因此在接收返回的指针是要通过一个媒介接收,否则可能会丢失原来的已开辟的内存块地址。
例如:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int* p = malloc(10 * sizeof(int));
int* ptr=realloc(p, 80);//不可直接用p接收realloc。
if (ptr!=NULL)
{
p = ptr;
for (int i = 0; i < 20; i++)
{
*(p + i) = i;
}
for (int i = 0; i < 20; i++)
{
printf("%d ", *(p + i));
}
}
return 0;
int* p=realloc(NULL,400)//等价于malloc(400);