1.什么是动态内存分配
所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
2.怎样建立内存的动态分配
2.1 malloc函数
函数原型:
void *malloc(unsigned int size);
其作用是在内存的动态存储区中分配一个长度为size的连续空间,需要注意的是,指针的基类型为void,既不指向任何类型的数据,只提供一个地址,若函数未能成功执行(例如内存不足),则返回一个空指针(NULL)
2.2 calloc函数
函数原型:
void *calloc(unsigned n,unsigned size);
其作用是在内存的动态存储区中分配n个长度为size的连续空间。函数返回一个向分配域起始位置的指针;若分配不成功,返回空指针。
用calloc函数可以为有一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size,这就是动态数组。
2.3 free函数
函数原型:
void free(void *p);
其作用是释放由指针变量p指向的动态空间,使这部分空间能被其他的变量使用。
2.4 realloc函数
函数原型:
void *realloc(void *p,unsigned int size);
如果已经通过malloc函数或者calloc函数获得了临时分配域,想改变函数其大小,可使用realloc函数重分配,将p所指向的临时分配域大小改变为size,例如:
reallac(p,50); /*将p所指向的已分配的动态空间改为50字节*/
以上四个函数声明在stdlib.h头文件中
例:
//建立动态数组,输入五个学生的成绩,另外用一个函数检查其中有无低于60分得,输出不
//及格的成绩
#include <stdio.h>
#include <stdlib.h>
int main(){
void check(int *p);
int i;
//指针p指向动态数组的首元素的地址
int *p=(int *)malloc(5*sizeof(int));
//输入成绩
for(i=0;i<5;i++){
scanf("%d",p+i);
}
check(p);
free(p);
return 0;
}
//函数check(int *p)用于检查成绩
void check(int *p){
int i=0;
printf("检查结果:\n");
for(;i<5;i++){
if(*(p+i)<60)
printf("%3d",*(p+i));
}
}