摘自《深入理解计算机系统》
程序使用动态存储器分配的最重要的原因是它们经常直到程序实际运行,才知道某些数据结构的大小。
例:
加入一个程序读取n个ASCII吗的整数的链表,每一行一个整数,从标准输入到一个C数组,输入n个整数,存储n个整数,通常可以采用一种方法就是直接定义一个很大的静态数组。
#include < stdio.h>
#define N 1500
int a[N];
int main(){
int i,m;
scanf(“%d”,&m);
if(m>N)
printf(“读入数据大于最大数据!\n”);
for(i=0;i < m; i++ )
scanf("%d",&a[i]);
return 0;
}
采用这种定义固定大小的数组,通常会导致一个异常,当待读入数据大于N时,那么就会发生读入文件失败,这种写法在实际项目会加大程序的维护复杂度。
为了让程序自动适应存储分配的大小,此时我们需要采用动态分配存储空间的方式,动态改变数组大小,如下所示:
#include < stdio.h>
#include < stdlib.h>
int main(){
int *a,i,m;
scanf(“%d”,&m);
a=(int *)malloc(m*sizeof(int));
for(i=0;i < m;i++ )
scanf("%d",&a[i]);
free(a);
return 0;
}
通过以上的示例对比,我们可以发现动态存储分配,对c语言编程起着非常重要的作用,所以我们必须认真的掌握动态存储分配的技巧。
相关阅读:
malloc的使用方法及注意事项