malloc分配二维数组

第一种:

int row = 64;
int cloumn = 64;
char **a = (char **)malloc(sizeof(char *) * row);
for (i = 0; i < row; ++i) {
    a[i] = (char *)malloc(sizeof(char) * cloumn);
}

第二种:

int (*a)[2] = malloc(sizeof(int)*3*2);

第三种:

让数组的内容连续, 但在后来重新分配列的时候会比较困难, 得使用一点指针算术:

#include <stdio.h>
#include <stdlib.h>
void main()
{
     int nrows,ncolumns;
     int **Array;
     int i,j;
     printf("please input nrows&ncolumns:/n");
     scanf("%d%d",&nrows,&ncolumns);
     Array=(int **)malloc(nrows*sizeof(int *));
     Array[0]=(int *)malloc(nrows*ncolumns*sizeof(int));
     for(i=1;i<nrows;i++)
         Array[i]=Array[0]+i*ncolumns;
     for(i=0;i<nrows;i++)
     {
         for(j=0;j<ncolumns;j++)
         {
             Array[i][j]=1;
             printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
         }
         printf("/n");
     }
     free(Array);
}

第四种:

同一个单独的动态分配的一维数组来模拟二维数组:

#include <stdio.h>
#include <stdlib.h>
void main()
{
     int nrows,ncolumns;
     int *Array;
     int i,j;
     printf("please input nrows&ncolumns:/n");
     scanf("%d%d",&nrows,&ncolumns);
     Array=(int *)malloc(nrows*ncolumns*sizeof(int *));
     for(i=0;i<nrows;i++)
     {
         for(j=0;j<ncolumns;j++)
         {
             Array[i*nrows+j]=1;
             printf("%d ",Array[i*nrows+j]);   //用 array3[i * ncolumns + j] 访问第 i, j 个成员
         }
         printf("/n");
     }
     free(Array);
}

猜你喜欢

转载自blog.csdn.net/QQ2558030393/article/details/91410666