在C语言中定义动态数组 1995-12-29 对于这类问题,一般的解决方法是根据实际问题确定元素个数的动态范围,定义尽可能大的数组。例如数组元素为一个班级的学生人数,可以定义有100个元素的数组。这种方法有两个缺点:1.当实际元素个数较少(例如一个班级只有40个学生)时浪费内存;2.一旦实际元素个数超过了所定义的范围(例如有101个学生),程序将不能正确执行。 利用指针变量可以很好地解决这个问题。在C语言中,一维数组名实质上是指向数据的指针,二维数组名是指向指针的指针,三维数组名是指向指针的指针的指针,依次类推。因此,定义一个指针变量,为它分配适当大小的内存,即可以把它当数组名来用。因为分配内存是在程序执行时完成的,所以,为指针变量分配大小不等的内存,即相当于定义了元素个数可变的数组。举例如下: 输入一个m行n列的矩阵,把它绕中心旋转180度打印出来。源程序为: #include /*用于分配内存*/ #include/*用于输入输出*/ main(){ int m,n; /*矩阵的行和列,执行时才知大小*/ int **a; /*指向int的指针的指针,相当于二维数组*/ int i,j; /*循环变量*/ scanf("%d%d",&m,&n); /*输入m,n*/ a=malloc(sizeof(int)*m*n); /*为a分配内存,大小为m*n个int元素*/ for (i=o;i=0;i--){ /*从最后一行到第一行*/ for (j=n-1;j>=0;j--) /*从最后一列到第一列*/ printf("%d",a[i][j]); /*打印矩阵元素*/ putchar('\n') /*换行*/ } }