#include <stdlib.h>
malloc,calloc,realloc函数相同之处:
1.这几个函数都在stdilb.h头文件中。
2.分配的内存不用时用free整块释放,当然free也可以传NULL,不会有任何影响。
3.都是动态分配
4.分配成功,返回所指向的指针,失败返回NULL
具体细节的不同:
void * malloc(size_t size) 动态分配指定大小连续内存单元
void *calloc(size_t nmemb,size_t size)分配根据元素数量和元素大小分配内存,但和malloc不同的是在返回指向内存的指针前初始化为0
void *realloc(void *ptr, size_t size)修改原先已经分配的内存块大小,方便扩充或缩小内存块。如扩充,原来内存数据保留,新加内存到原来内存后面,新加内存并未初始化;
如缩小,尾部数据被删除,剩余数据不变。此函数ptr参数若为NULL,和malloc函数一样
动态分配的内存不仅可以用指针访问,也可以用下标。如:
int *p, i ;
p = malloc(10*sizeof(int));
for(i = 0; i < 10;i++ )
{
*p++ = i;
p[i] = i;//两种操作方式都可以
}