C语言中,内存管理是通过专门的函数来实现的。
(1)malloc函数:
用于分配若干字节的内存空间,并返回一个指向该内存空间首地址的指针变量。
若系统不能提供足够的内存单元,将会返回一个NULL,空指针NULL意味着它不指向任何对象,使用空指针将会使系统崩溃。
原型:void *malloc(unsigned int
size)
(该函数返回的指针变量无类型)
(向系统申请的空间大小,申请成功将返回void型指针)
Eg:int *p;
p = (int
*)malloc(sizeof(int));
(2)calloc()函数:
用于给若干同类型的数据分配连续的存储空间并将内存初始化为0,返回一个指向该连续存储空间首地址的指针变量
函数原型:void *calloc(unsigned int
num,unsigned int size);此时,相当于建立了一个一维动态数组
(num即向系统申请的
内存空间的数量) (size即申请的每个空间的字节数)
float *p;
p = (float
*)calloc(10,sizeof(float)) || p = (float
*)malloc(10*sizeof(float));
(3)free()函数
释放向系统动态申请的由指针p指向的存储空间
原型:void free(void *p)
(4)realloc()函数
用于改变原来分配的存储空间大小
原型:void *realloc(void *p,unsigned int
size);
将指针p所指向的存储空间大小改为size个字节,函数返回值是新分配的存储空间首地址,与原来的首地址不一定相同。
由于动态内存分配得到的存储单元是无名的,只能通过用指针变量来引用它,
所以,一旦改变了指针指向,原来分配的内存及数据就会丢失,所以不要随便改变指针变量的值。