简述
概念:使程序在运行过程中能根据需要分配内存空间,其分配的内存空间通常称为堆。
具体操作:用一指针指向动态存储分配得到的内存空间,此后通过对指针的操作,就可以使用这个内存空间了。
使用的四个函数:malloc函数,calloc函数,realloc函数,free函数。使用这些函数必须包含<stdlib.h>文件。
1,malloc函数
void* malloc(size_t size);
在c99之后,可以通过下面方法来分配内存空间的值
但是在c99之前要通过malloc来进行动态存储分配。
#include<stdio.h>
#include<stdlib.h>
int main() {
int length;
scanf_s("%d", &length);
//int array[length];
int* p = (int*)malloc(length * sizeof(int));
/*将指针p指向malloc分配得到的内存地址。*/
for (int i = 0;i < length;i++) {
printf("array[%d]的地址:%p,值:%d\n", i, &p[i], p[i]);
}
return 0;
}
对于上面malloc函数的使用 int* p = (int*)malloc(length * sizeof(int)),
注意:因为malloc函数是void类型的指针,所以在将其赋给指针p时要强制转化成int型。
因为malloc返回值的void,无法将voi给int,只有通过(int*)来强制转换。
malloc不会对分配内存空间初始化
2,calloc函数
void* calloc(size_t nmemb,size_t size);
与malloc的使用相似,只是calloc函数有两个参数。第一个为空间个数,第二个为每个空间的大小。
与malloc函数不同的是,calloc会对分配的内存空间初始化。
3.realloc函数
void* realloc(viod* ptr,size_t size);
realloc函数用于调整先前分配的内存空间的大小,并返回该内存空间的通用指针,ptr指向的是先前已分配的内存空间,size表示新内存空间的大小。
4.free函数
void free(void* ptr);
free释放由malloc / calloc函数分配的内存空间,指针ptr指向要释放的空间。
内存被释放为空
补充
如果不能成功分配指定大小的内存空间,这些函数会返回空指针NULL。