Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621167
  • 博文数量: 172
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1252
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-29 22:26
文章分类

全部博文(172)

文章存档

2011年(6)

2010年(7)

2009年(159)

我的朋友

分类: C/C++

2010-08-22 19:28:58

假设我需要一个nrows、ncolumns数组,则可以用以下几种方法动态分配空间:

1.动态数组的成员都可以用正常的数组下标 Array[i][j]

#include
#include
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 *));
     for(i=0;i         Array[i]=(int *)malloc(sizeof(*Array));
     for(i=0;i     {
         for(j=0;j         {
             Array[i][j]=1;
             printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
         }
         printf("\n");
     }
     free(Array);
}

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

#include
#include
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         Array[i]=Array[0]+i*ncolumns;
     for(i=0;i     {
         for(j=0;j         {
             Array[i][j]=1;
             printf("%d ",Array[i][j]);   //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
         }
         printf("\n");
     }
     free(Array);
}

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

#include
#include
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     {
         for(j=0;j         {
             Array[i*nrows+j]=1;
             printf("%d ",Array[i*nrows+j]);   //用 array3[i * ncolumns + j] 访问第 i, j 个成员
         }
         printf("\n");
     }
     free(Array);
}

阅读(2285) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~