使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。示例代码,分配3行4列二维数组:
#include <stdio.h>
#include <malloc.h>
int main()
{
int **a;
int i, j;
a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行
for (i = 0; i < 3; ++i){//为每列分配4个大小空间
a[i] = (int*)malloc(sizeof(int)*4);
}
//初始化
for (i = 0; i < 3; ++i){
for (j = 0; j < 4; ++j){
a[i][j] = i+j;
}
}
//输出测试
for (i = 0; i < 3; ++i){
for (j = 0; j < 4; ++j){
printf ("%d ", a[i][j]);
}
printf ("\n");
}
//释放动态开辟的空间
for (i = 0; i < 3; ++i){
free(a[i]);
}
free(a);
return 0;
}
/*
输出:
0 1 2 3
1 2 3 4
2 3 4 5
*/
实列:
#include<stdlib.h>
#include<math.h>
int main()
{
int m,n,i,j,tem,max,k,t=0;
while(~scanf("%d %d",&m,&n))
{
int **a,**b;
a=(int **)malloc(sizeof(int)*m);
b=(int **)malloc(sizeof(int)*m);
for(i=0;i<m;i++)
{
a[i]=(int *)malloc(sizeof(int)*n);
b[i]=(int *)malloc(sizeof(int)*n);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
b[i][j]=fabs(a[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n-1;j++)
{
for(k=0;k<n-1-j;k++)
{
if(b[i][j]>b[i][j+1])
{
tem=b[i][j];
b[i][j]=b[i][j+1];
b[i][j+1]=tem;
}
}
}
}
max=b[0][n-1];
for(i=0,j=n-1;i<m;i++)
{
if(b[i][j]>=max)
max=b[i][j];
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(fabs(a[i][j])==max){
printf("%d %d %d\n",i+1,j+1,a[i][j]);
t=1;
break;
}
}
if(t==1)
break;
}
t=0;
}
}