malloc对于二维数组和三维数组的申请

给出以下几个注意:

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]);
	  }
   }

猜你喜欢

转载自blog.csdn.net/c_living/article/details/79461041