为什么返回的是void *
为什么返回 void * ,而不是 int * / double * / char * ......
因为它不知道你要用这块内存保存什么类型的数据,
如果返回 int *,结果你是用来保存double类型的数据呢?还需要强转
如果返回 double *,结果你是用来保存char 类型的数据呢?还需要强转
...
所以干脆不指定具体的类型,用 void *这种通用类型来表示,你可以根据实际情况进行赋值/转换
malloc
void *malloc(size_t size);
size :你想要分配内存的字节数目
返回值:
失败返回 NULL (内存不足的时候会分配失败)
成功返回 这块内存的首地址
malloc(20);
calloc
void *calloc(size_t nmemb, size_t size);
作用和 malloc类似,分配一个数组, nmemb * size 为要分配的总字节数目
nmemb :数组元素个数
size :单个元素所占字节大小
返回值:
失败返回 NULL (内存不足的时候会分配失败)
成功返回 这块内存的首地址
分配的这块内存,全部初始化为0
realloc
void *realloc(void *ptr, size_t size);
是用来为已经分配的动态内存进行扩容的
ptr :原来分配的内存的首地址
size :是扩容之后的大小
返回值:
失败返回 NULL (内存不足的时候会分配失败)
成功返回 扩容之后的内存的首地址
扩容之后,原来的数据保留
free
void free(void *ptr);
ptr :动态分配内存的首地址