以下是动态申请a[m][n]的源代码
代码一:
/* 编译器:DEV C++
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{int **a;int i,j,m,n;scanf("%d%d",&m,&n); a = (int **)malloc(sizeof(int *)*m);for (i=0;i<m; i++){a[i] = (int *)malloc(sizeof(int)*n);}for(i=0;i<m;i++){for(j=0;j<n;j++){a[i][j]=i*j+10;printf("a[%d][%d]:%d ",i,j,a[i][j]);}printf("\n"); } return 0;
}
代码二(对代码一进行了简化):
/* 编译器:DEV C++
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{int m,n;int i,j;scanf("%d%d",&m,&n);//二维数组也是线性的存储结构 int (*a)[n]=(int(*)[n])(malloc(sizeof(int)*m*n));for(i=0;i<m;i++){for(j=0;j<n;j++){a[i][j]=i*j+10;printf("a[%d][%d]:%d ",i,j,a[i][j]);} printf("\n"); }return 0;
}
注意:
不同的编译器对语法要求的严格性是不一样的,例如有的编译器在编译期时要求二维数组的第二维的值要是一个定值有的则没有要求,有的编译器则对强制转换不怎有要求的有的则要求比较严,注意对不同的编译器不同对待,“以不变应万变”。