在C语言中定义动态数组
利用指针变量可以很好地解决这个问题。在C语言中,一维数组名实质上是指向数据的指针,二维数组名是指向指针的指针,三维数组名是指向指针的指针的指针,依次类推。因此,定义一个指针变量,为它分配适当大小的内存,即可以把它当数组名来用。因为分配内存是在程序执行时完成的,所以,为指针变量分配大小不等的内存,即相当于定义了元素个数可变的数组。举例如下:
输入一个m行n列的矩阵,把它绕中心旋转180度打印出来。源程序为:
#include<alloc.h> /*用于分配内存*/
#include<stdio.h>/*用于输入输出*/
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<m;i++)
for (j=0;j<n;j++)
scanf("%d",&a[i][j]); /*输入矩阵元素*/
putchar('\n') /*输入和输出之间空一行*/
for (i=m-1;i>=0;i--){ /*从最后一行到第一行*/
for (j=n-1;j>=0;j--) /*从最后一列到第一列*/
printf("%d",a[i][j]); /*打印矩阵元素*/
putchar('\n') /*换行*/
}
}