对于二维数组:一般来说,当给两个数分别表示行列,但两个数的范围过大,就需要动态分配。
int i,j,m,n;scanf("%d%d",&m,&n);int **a;a=(int**)malloc(sizeof(int*)*m);for(i=0;i<m;++i)a[i]=(int *)malloc(sizeof(int)*n);
之后完全可以把a看做二维数组名称而用a[][]来做题。
对于指针数组
int n,i,j;char *s[15];scanf("%d",&n);getchar();for(i=0;i<n;++i){gets(a);s[i]=(char*)malloc(sizeof(char)*(strlen(a)+1));strcpy(s[i],a);}
注意对于字符串数组,strlen+1, (malloc后面的是字节数,别忘了还有'\0'.)
通常用于存字符串。