C语言不允许对数组的大小作动态定义,不能在程序中临时输入数组大小,这就给编程带来一定的困难。
下面通过一个求平均数和标准差的小程序来展示如何在程序中动态定义数组大小:
1 /*如何在c程序中动态使用数组(calloc函数)*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 int main(){ 6 int num; //数据个数 7 double sum,ave,s2; //数据和、平均数、方差 8 printf("请输入数据个数:"); 9 scanf("%d",&num) ; 10 double* array=(double*) calloc(num,sizeof(double)); //使用calloc函数申请数据数组的内存,然后用一个double指针接收(也可以使用malloc函数代替calloc) 11 printf("请输入数据:"); 12 for(int i=0;i<num;i++){ //这里便可以通过已知的数组长度进行数据输入 13 scanf("%lf",&array[i]); 14 sum+=array[i]; 15 } 16 17 printf("平均数为:%lf",ave=sum/num); 18 for(int i=0;i<num;i++){ 19 s2+=pow(array[i]-ave,2); 20 } 21 printf("标准差为:%lf",sqrt(s2)); //求标准差 22 free(array); //释放申请的内存 23 return 0; 24 }
重点在于第10行代码,要用到calloc函数: 它包含于stdlib.h头文件,需要给它提供两个参数:①对象个数:也就是要定义数组的大小;②对象长度:单位为字节,一般可以用sizeof(类型名)来求得。然后,calloc函数会将“数组首地址”返回,这时候我们一般需要对它进行强转成我们所需要的数组类型。
在本程序中,要求一组未知个数的数据的平均值和标准差,首先定义int变量num,它是我们在程序中临时输入的数组长度,然后便可以调用calloc函数。由于我们需要的是double数组,还需要将calloc函数返回值强转,最后用一个double指针接收这个首地址,就可以将这个指针看作是“数组”了。接下来就可以随心所欲地对这个数组进行处理了。
malloc函数与calloc类似,只不过它只需要一个参数:所需要地址总大小,这时我们可以通过将num*sizeof(double)传递给malloc函数了。调用malloc函数既可以使用stdlib.h也可以使用malloc.h。