给出以下几个注意:
c语言中:
1.二维数组里面,malloc必须传给malloc申请的。int a[][] 和int **是不能相互传的,会报错。
2.然后return的二维数组,不能用int a[][]这种,函数是不能返回这个的,因为你函数头是用的int**,只能用malloc申请的。
如果有必要比可以先在函数中申请一个大数组,然后获得了你需要的参数再进行动态申请,复制数组然后删除数组即可!
对于二维数组的动态申请,可以采取下面的方法:
int **p;
int i,j;
p = (int **)malloc(sizeof(int *)*3); //3row2clumn
for(i = 0;i < 3;i++)
{
p[i] = (int *)malloc(sizeof(int)*2);
for(j = 0;j < 2;j++)
scanf("%d",&p[i][j]);
}
第一层的行可以直接sizeof(int*)而并不需要告诉int *是多少字节的。
然后是列的申请,可以sizeof(int)这是比较特殊的
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
同理三维的申请是一样的道理:
int ***p;
int i,j,k;
p = (int ***)malloc(sizeof(int **)*3); //3*2*2
for(i = 0;i < 3;i++)
{
p[i] = (int **)malloc(sizeof(int*)*2);
for(j = 0;j < 2;j++)
{
p[i][j] = (int *)malloc(sizeof(int)*2);
for(k = 0;k < 2;k++)
scanf("%d",&p[i][j][k]);
}
}