码迷,mamicode.com
首页 > 编程语言 > 详细

[ 1001] 动态开辟二维数组的说明

时间:2015-12-17 22:36:49      阅读:335      评论:0      收藏:0      [点我收藏+]

标签:动态开辟二维数组的说明

开辟二维数组的说明 

  

  图解  [1][][][][]

        [2][][][][]

        [3][][][][]

void main()

{         

int i,j;

/*注意申请的指针格式  先创建的是1,2,3首地址为指向指针的指针a来代表 1,2,3所在地址*/

int **a = (int **) malloc(sizeof(int *) * 3);

/* 循环创建了3个 1*4的数组 并将首地址给了 1,2,3的位置上*/

for (j=0;j<3;j++)

{

a[j] = (int *) malloc(sizeof(int) * 4);

}


for (i=0;i<3;i++)

  {

  for (j=0;j<4;j++)

    {

a[i][j]=i+j;/* 使用的区域就是1,2,3后面的 3*4个 int 整型空间 */

    printf("%d ",a[i][j]);

    }

  printf("\n");

  }

   for (j=0;j<3;j++)

  {

   free(a[j]);  /* 先释放1,2,3上的指针指向的3片区域 */

   }


free(a);   /* 最后释放,能指向1,2,3的指针*/

}/*******************

0 1 2 3

1 2 3 4

2 3 4 5

以下也是 这结果

*******************/

void main()

{

   int *temp;

   int m=3,n=4,i,j;

   int **a = (int **)malloc(m*sizeof(int *));

   temp=(int *)malloc(m*n*sizeof(int));

   for(  i=0;i<m;i++)

   {

     // a[i] = temp+n;  /* 关于网站(http://bbs.csdn.net/topics/200005906)里的讨论,试了一下均可以*/

     a[i] = temp+n*i;

      for(  j=0;j<n;j++)

         

       {

       a[i][j]=i+j;

       printf("%d ",a[i][j]);

        }

   printf("\n");

    }

   free(temp);

   free(a);

}







void main()

{

 

    int *temp;

    int m,n;

    printf("Input the m,n:");

    scanf("%d%d",&m,&n);

    temp=(int *)malloc(m*n*sizeof(int));

    for(int i=0;i<m;i++)

        for(int j=0;j<n;j++)

        {

            printf("Input the data: ");

            scanf("%d", &temp[i,j]);  //好象直接这样子就可以的,

        }

    for (int i=0; i<m; i++)

        for(int j=0; j<n; j++)

            printf("%d ", temp[i,j]);

 

    return 0;

}

}

/*******************

2 2 2

2 2 2 

*******************/

 

void main()

{

 int (*a)[0] = malloc(sizeof(int)*3*4);  /* 不用写明转换类型的版本 */

 int i=0,j=0;

 

for (i=0;i<3;i++)

  {

  for (j=0;j<4;j++)

    {

a[i][j]=i+j; 

    printf("%d ",a[i][j]);

    }

  printf("\n");

  } 


}


 //结构体的方式 不便于写访问

main()

{

    arr *array1;

    int rowx=3,rowy=4;

    int i,j,k=0;

     

    array1=(arr *)malloc(sizeof(arr)*rowx);//创建链表数组

    for(i=0;i<rowx;i++)  //再在每一个链表中创建一维数组,这样整体就构成二维数组

   array1[i].array=(int *)malloc(sizeof(int)*rowy);

 

}


malloc连续开辟性 但在以上方法中,先一维再循环开辟二维中并不能保证 空间是连续的 与直接定义 int A[3][4];不一样;

/* c++(http://blog.csdn.net/vipygd/article/details/5909817)里面写了写新的方法 */


[ 1001] 动态开辟二维数组的说明

标签:动态开辟二维数组的说明

原文地址:http://wz609.blog.51cto.com/10821410/1725824

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!